0

我有一个包含 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 更新?

编辑:包含 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>

Departments.aspx 的完整代码

4

2 回答 2

1

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

<asp:DropDownList ID="drpDepartments" runat="server" DataSourceID="SqlDataSource3" 
    AutoPostack="True" DataTextField="department_name" DataValueField="department_name">
</asp:DropDownList>
于 2013-04-13T13:40:24.713 回答
1

试试这个...改变这个

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

 <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
于 2013-04-13T13:41:06.983 回答