【问题标题】:UpdatePanel not updating ListBoxUpdatePanel 不更新列表框
【发布时间】:2013-04-13 13:27:21
【问题描述】:

我有一个包含 ListBox 的 UpdatePanel。每当我从 DropDown 更改选择时,我都希望通过 UpdatePanel 更新列表。但是这不起作用。

这是我目前的代码:

 Protected Sub drpDepartments_SelectedIndexChanged(sender As Object, e As EventArgs) Handles drpDepartments.SelectedIndexChanged

        Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True")
        Dim deptComm As String = "SELECT department_id FROM departments WHERE department_name = @DepartmentName"

        Dim deptSQL As New SqlCommand
        Dim dr As SqlDataReader = deptSQL.ExecuteReader()

        deptSQL = New SqlCommand(deptComm, conn)
        deptSQL.Parameters.AddWithValue("@DepartmentName", drpDepartments.SelectedItem.Text)

        dr.Read()

        If dr.HasRows Then


            Dim department_id As Integer = Convert.ToInt32(dr("department_id"))
            Session("DepartmentID") = department_id

        End If

        dr.Close()
        conn.Close()

ASP

 <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                    <ContentTemplate>
                        <asp:ListBox ID="lstDeptMembers" runat="server" DataSourceID="SqlDataSource4" DataTextField="name" DataValueField="name" Height="176px" Width="204px"></asp:ListBox>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="drpDepartments" EventName="SelectedIndexChanged" />
                    </Triggers>
                </asp:UpdatePanel>

                <asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:ConnStringDb1 %>" SelectCommand="SELECT * FROM users u
INNER JOIN 
(
Select x.user_id as userid,x.department_id,y.department_name
 from user_Department x 
inner join departments y 
on x.department_id=y.department_id WHERE x.department_id=@parameter
) 
    f on u.user_id= f.userid">
                    <SelectParameters>
                        <asp:SessionParameter Name="parameter" SessionField="DepartmentID" />
                    </SelectParameters>
                </asp:SqlDataSource>

下拉列表:

 <asp:DropDownList ID="drpDepartments" runat="server" DataSourceID="SqlDataSource3" DataTextField="department_name" DataValueField="department_name">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ConnStringDb1 %>" SelectCommand="SELECT [department_name] FROM [departments]"></asp:SqlDataSource>

截图:

当从 DropDown 中单击新选择时,如何使 ListBox 更新?

编辑:包含列表框等的表的代码。:

<asp:DropDownList ID="drpDepartments" runat="server" DataSourceID="SqlDataSource3" DataTextField="department_name" DataValueField="department_name">
    </asp:DropDownList>
    <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ConnStringDb1 %>" SelectCommand="SELECT [department_name] FROM [departments]"></asp:SqlDataSource>

    <br />

    <br />


     <table style="width:100%;">
            <tr>
                <td style="width: 221px">






                    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                        <ContentTemplate>
                            <asp:ListBox ID="lstDeptMembers" runat="server" DataSourceID="SqlDataSource4" DataTextField="name" DataValueField="name" Height="176px" Width="204px"></asp:ListBox>
                        </ContentTemplate>
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="drpDepartments" EventName="SelectedIndexChanged" />
                        </Triggers>
                    </asp:UpdatePanel>

                    <asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:ConnStringDb1 %>" SelectCommand="SELECT * FROM users u
    INNER JOIN 
    (
    Select x.user_id as userid,x.department_id,y.department_name
     from user_Department x 
    inner join departments y 
    on x.department_id=y.department_id WHERE x.department_id=@parameter
    ) 
        f on u.user_id= f.userid">
                        <SelectParameters>
                            <asp:SessionParameter Name="parameter" SessionField="DepartmentID" />
                        </SelectParameters>
                    </asp:SqlDataSource>

                </td>
                <td style="width: 398px">


                    <asp:TextBox ID="txtuserSearch" runat="server"></asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;
                    <asp:Button ID="btnSearchDeptUser" runat="server" Text="Search" />
                    <br />
                    <asp:Label ID="lblAddDeptUser" runat="server" Visible="False"></asp:Label>


                </td>

            </tr>
            <tr>
                <td >
                    <asp:Button ID="btnRmvDeptMem" runat="server" Text="Remove" />
                </td>
                <td>
                    <asp:Button ID="btnAddDeptUser" runat="server" Text="Add" />
                </td>

            </tr>

        </table>

Full code for Departments.aspx

【问题讨论】:

  • 这个下拉列表在哪里,你还没显示?
  • 为什么要根据下拉列表的SelectedItemdepartment_name从数据库中查询department_id的id呢?您只需将 DataValueField 设置为您的 id 字段,然后值就是 id,文本(显示的内容)就是名称。
  • @TimSchmelter 用下拉代码更新了问题。
  • 请提供完整的示例代码。我们无法确定下拉列表的 HTML 部分在哪里以及它被绑定到哪里!
  • @MuhammadOmar 你是对的。对不起。更新了问题。谢谢。

标签: asp.net vb.net drop-down-menu listbox updatepanel


【解决方案1】:

如果您想在用户选择DropDownList 中的项目时立即更新UpdatePanel,您必须将其AutoPostBack 属性设置为"True"(默认为false):

<asp:DropDownList ID="drpDepartments" runat="server" DataSourceID="SqlDataSource3" 
    AutoPostack="True" DataTextField="department_name" DataValueField="department_name">
</asp:DropDownList>

【讨论】:

  • @TimeSchmelter 啊,没关系。我不得不从 GUI 更改它。
  • 虽然它正在更新,但该页面向我抛出了一个错误(每当我尝试更改 DropDown 的选定值时,它都会在 C# 代码中打开一些页面)
【解决方案2】:

试试这个... 改变这个

<asp:UpdatePanel ID="UpdatePanel2" runat="server">

 <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

【讨论】:

  • 那么你必须手动从代码隐藏中调用UpdatePanel2.Update()。然而,这不是原因,因为他定义了一个AsyncPostBackTrigger
  • @TimSchmelter 请像条件更新的第二个选项一样检查这个.....msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多