2013-04-13 4 views
0

У меня есть UpdatePanel, содержащий ListBox. Всякий раз, когда я меняю выбор на DropDown, я хочу, чтобы список обновлялся через UpdatePanel. Однако это не работает.UpdatePanel не обновляет ListBox

Это мой код до сих пор:

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 [email protected] 
) 
    f on u.user_id= f.userid"> 
        <SelectParameters> 
         <asp:SessionParameter Name="parameter" SessionField="DepartmentID" /> 
        </SelectParameters> 
       </asp:SqlDataSource> 

DropDownList:

<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> 

Скриншот:

enter image description here

Как я могу сделать так, чтобы ListBox обновлялся всякий раз, когда щелкнул новый выбор из DropDown?

EDIT: Код для таблицы, которая содержит 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 [email protected] 
    ) 
     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

+1

Где это DropDownList, вы не показали его? –

+0

И почему вы запрашиваете идентификатор 'department_id' из базы данных в соответствии с именем' department_name' в выпадающем списке 'SelectedItem'? Вам просто нужно установить ['DataValueField'] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.datavaluefield.asp) в поле id, затем Значение - это идентификатор, а текст (то, что отображается) - это имя. –

+0

@TimSchmelter Обновлен вопрос с помощью выпадающего кода. – Brian

ответ

1

Если вы хотите обновить UpdatePanel немедленно, когда пользователь выбирает элемент в DropDownList вас необходимо установить его AutoPostBack имущество на "True" (по умолчанию false):

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

Нет, это не сработало для меня:/ – Brian

+0

@TimeSchmelter Ahh nevermind. Мне пришлось изменить его из графического интерфейса. – Brian

+0

Наверху это обновление, страница вызывает ошибку (она открывает некоторую страницу в коде C#, когда я пытаюсь изменить выбранное значение DropDown) – Brian

1

попробовать это ... Изменить этот

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

с

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

Затем вам нужно вызвать 'UpdatePanel2.Update()' из codebehind вручную. Однако это не причина, так как он определил «AsyncPostBackTrigger». –

+0

@AmitSingh Nope .. это не работает – Brian

+0

@TimSchmelter PLS проверьте это как второй вариант условного обновления ..... http: // msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.updatemode.aspx –

Смежные вопросы