Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么赢了';我的UpdatePanel是否按我所期望的那样在单击按钮时更新我的列表框?_Asp.net_Ajax_Listbox_Updatepanel_Sqldatasource - Fatal编程技术网

Asp.net 为什么赢了';我的UpdatePanel是否按我所期望的那样在单击按钮时更新我的列表框?

Asp.net 为什么赢了';我的UpdatePanel是否按我所期望的那样在单击按钮时更新我的列表框?,asp.net,ajax,listbox,updatepanel,sqldatasource,Asp.net,Ajax,Listbox,Updatepanel,Sqldatasource,我有一个表单,在UpdatePanel中有一个下拉列表、两个按钮和两个列表框。Dropdownlist和ListBox都绑定到SqlDatasources。下拉列表允许您选择您的部门 第一个列表框显示与您从部门中选择的工作相关联的工作列表 第二个列表框显示这些项目的反向列表。(数据库中与您的部门无关的作业) 当项目从第一个列表框中删除时,它应显示在第二个列表框中。当项目从第二个列表框中删除时,它应该显示在第一个列表框中 此功能允许您在部门中添加和删除作业 页面上有两个按钮作为添加和删除按钮。除列

我有一个表单,在UpdatePanel中有一个下拉列表、两个按钮和两个列表框。Dropdownlist和ListBox都绑定到SqlDatasources。下拉列表允许您选择您的部门

第一个列表框显示与您从部门中选择的工作相关联的工作列表

第二个列表框显示这些项目的反向列表。(数据库中与您的部门无关的作业)

当项目从第一个列表框中删除时,它应显示在第二个列表框中。当项目从第二个列表框中删除时,它应该显示在第一个列表框中

此功能允许您在部门中添加和删除作业

页面上有两个按钮作为添加和删除按钮。除列表框无法可靠更新外,其他一切都正常工作。数据本身在数据库中更新,如果我刷新(F5),它将正确显示


两个按钮单击事件的代码如下:

protectedsub btnAddJob_Click(ByVal sender作为对象,ByVal e作为System.EventArgs)处理btnAddJob。Click
将sqlJobsDB作为新的SqlConnection(ConfigurationManager.ConnectionString(“JobsDB”).ConnectionString)进行调整
Dim sqlCmdInsert As SqlCommand=sqlJobsDB.CreateCommand()
sqlJobsDB.Open()
sqlCmdInsert.CommandText=_
“插入tblDeptsJobs(DeptID,JobID)值”+_
(@DeptID,@JobID)
'声明参数的数据类型
sqlCmdInsert.Parameters.Add(“@DeptID”,SqlDbType.TinyInt)
sqlCmdInsert.Parameters.Add(“@JobID”,SqlDbType.TinyInt)
'从窗体中指定参数值
sqlCmdInsert.Parameters(“@DeptID”).Value=ddldDepartments.SelectedValue
sqlCmdInsert.Parameters(“@JobID”).Value=lstJobsOut.SelectedValue
'执行insert语句
sqlCmdInsert.ExecuteOnQuery()
sqlJobsDB.Close()
端接头
受保护的子btnRemoveJob_Click(ByVal sender作为对象,ByVal e作为System.EventArgs)处理btnRemoveJob。单击
将sqlJobsDB作为新的SqlConnection(ConfigurationManager.ConnectionString(“JobsDB”).ConnectionString)进行调整
Dim sqlCmdDelete As SqlCommand=sqlJobsDB.CreateCommand()
sqlJobsDB.Open()
sqlCmdDelete.CommandText=_
“从tblDeptsJobs中删除,其中tblDeptsJobs.DeptID=@DeptID和tblDeptsJobs.JobID=@JobID”
'声明参数的数据类型
sqlCmdDelete.Parameters.Add(“@DeptID”,SqlDbType.TinyInt)
sqlCmdDelete.Parameters.Add(“@JobID”,SqlDbType.TinyInt)
'从窗体中指定参数值
sqlCmdDelete.Parameters(“@DeptID”).Value=ddldDepartments.SelectedValue
sqlCmdDelete.Parameters(“@JobID”).Value=lstJobsIn.SelectedValue
'执行insert语句
sqlCmdDelete.ExecuteNonQuery()
sqlJobsDB.Close()
端接头
感觉上,当我添加或删除作业时,我上次选择项目的列表框是不更新的

如果不将dropdownlist上的autopostback设置为True,我也无法让dropdownlist更新列表框


我遇到的丑陋的AdvID Advices修正是使用<代码> ListBoo.Butial.Cube()/Case>方法,然后重新绑定每个ListBox的数据。< /P> < P>只需将DROPUBLIST AutoPotoBeST设置为true,删除所有触发器并设置子Advigigigs=“true”。在updatepanel上。

基本上是更新数据库,但从不重新绑定控件。我不确定您必须在单击处理程序中放入什么才能使其工作(因为我以前从未使用过SQL数据源控件),但它应该是这样的:

Protected Sub btnAddJob_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddJob.Click

    Dim sqlJobsDB As New SqlConnection(ConfigurationManager.ConnectionStrings("JobsDB").ConnectionString)
    Dim sqlCmdInsert As SqlCommand = sqlJobsDB.CreateCommand()

    sqlJobsDB.Open()
    sqlCmdInsert.CommandText = _
        "INSERT INTO tblDeptsJobs (DeptID, JobID) VALUES " + _
        "(@DeptID, @JobID)"

    ' Declare the data types for the parameters
    sqlCmdInsert.Parameters.Add("@DeptID", SqlDbType.TinyInt)
    sqlCmdInsert.Parameters.Add("@JobID", SqlDbType.TinyInt)

    ' Assign the parameters values from the form
    sqlCmdInsert.Parameters("@DeptID").Value = ddlDepartments.SelectedValue
    sqlCmdInsert.Parameters("@JobID").Value = lstJobsOut.SelectedValue

    ' Execute the insert Statement
    sqlCmdInsert.ExecuteNonQuery()

    sqlJobsDB.Close()

    //may need to do explicit call to DB to get data here
    //after you have the data, rebind
    lstJobsIn.DataBind();
    lstJobsOut.DataBind();
End Sub

这大概就是它的样子。我很想看看你到底做了什么来解决你的问题。

你能为异步回发添加服务器端代码吗?如果你不喜欢UpdatePanel,我建议你只使用javascript/jQuery和web方法。我一直对ASP更新面板感到头疼。@因为据我所知,异步回发的服务器端处理程序是ScriptManager@Lucretius我指的是在服务器上被调用的函数。例如,当我点击btnAddJob时,执行什么函数/代码?点击?(这就是我假设您对数据库进行更改的地方。)这样做会很有帮助。@Becuzz我明白了,我现在就添加它。一个是insert语句,一个是delete语句。注意:我还没有编写任何异常处理代码,比如如果有人尝试两次添加相同的记录(只需双击),它就会破坏记录。在屏幕截图中,我从departments下拉列表中选择了“Maintenance”。我试图将“混音器”作业从右侧的列表框移至左侧的列表框。它显示在左侧,但不会从右侧的列表框中删除。如果我随后手动刷新页面(F5),它将从右侧的列表中删除。您可以将数据源控件放入同一个UpdatePanel中吗?尝试过,没有效果。数据库中的数据本身正在更改,因此更新这些数据不会帮助列表框更新。这就是我最后所做的(编辑了我的第一篇文章)。我不知道这是否必要,但在
.DataBind()
之前,我在这两个列表框上都执行了
.clear()
,现在它们工作正常。如果“修改数据绑定项”属性设置为true,则列表框可能只需要
.clear()