0

我有三个下拉列表,其中第二个内容取决于第一个内容,第三个内容取决于第二个内容。这工作时,首先显示的页面:如何在“主”下拉列表更改时重新填充“相关”下拉列表?

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If PageAlreadyInitted = True Then Exit Sub 
    If Page.IsPostBack = True Then Exit Sub 
    PageAlreadyInitted = True 

    Dim sqlDAL As New SQLServer(ConfigurationSettings.AppSettings("ConnectionString")) 
    'Populate the Units dropdown 
    Dim unitsDT As DataTable 
    Dim sql As String = "Select distinct mu.unit from masterunits mu left join MasterUnitsProjSales mps on mps.Unit = mu.Unit where abs(active) = 1 and mps.NewBiz != 0 order by mu.unit" 
    Dim retDS As DataSet = sqlDAL.runSQLDataSet(sql) 
    unitsDT = retDS.Tables(0) 
    DropDownListUnits.DataSource = unitsDT 
    DropDownListUnits.DataTextField = "unit" 
    DropDownListUnits.DataValueField = "unit" 
    DropDownListUnits.DataBind() 

    'Populate the Members dropdown - TODO: Call this when Unit changes, too 
    Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text 
    Dim membersDT As DataTable 
    sql = "select distinct shortname, M.memberno from members M left join memberunitproducts mup on M.MemberNo = mup.MemberNo where unit = '" + selectedUnit + "' order by shortname" 
    retDS = sqlDAL.runSQLDataSet(sql) 
    membersDT = retDS.Tables(0) 
    DropDownListMembers.DataSource = membersDT 
    DropDownListMembers.DataTextField = "shortname" 
    DropDownListMembers.DataValueField = "memberno" 
    DropDownListMembers.DataBind() 

    'Populate the Customers dropdown - TODO: Call this when Member changes, too 
    Dim selectedMember As String = DropDownListMembers.SelectedItem.Value 
    Dim customersDT As DataTable 
    sql = "select distinct companyname, custno from customers C left join members M on M.MemberNo = C.MemberNo where M.MemberNo = '" + selectedMember + "' order by companyname" 
    retDS = sqlDAL.runSQLDataSet(sql) 
    customersDT = retDS.Tables(0) 
    DropDownListCustomers.DataSource = customersDT 
    DropDownListCustomers.DataTextField = "companyname" 
    DropDownListCustomers.DataValueField = "custno" 
    DropDownListCustomers.DataBind() 

    sqlDAL.Dispose() 
End Sub 

...但我需要第二个下拉更新时的第一个变化的选择,而第三个更新时的第二个变化的选择。我有了这个代码,试图实现这一目标:

Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged 
    DropDownListMembers.Items.Clear() 
    DropDownListCustomers.Items.Clear() 

    'Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text 
    Dim selectedUnit As String = DropDownListUnits.SelectedItem.ToString() 
    Label2.Text = selectedUnit 

    Dim sqlDAL As New SQLServer(ConfigurationSettings.AppSettings("ConnectionString")) 
    Dim membersDT As DataTable 
    Dim retDS As DataSet 
    Dim sql As String = "select distinct shortname, M.memberno from members M left join memberunitproducts mup on M.MemberNo = mup.MemberNo where unit = '" + selectedUnit + "' order by shortname" 
    retDS = sqlDAL.runSQLDataSet(sql) 
    membersDT = retDS.Tables(0) 

    DropDownListMembers.DataSource = membersDT 
    DropDownListMembers.DataTextField = "shortname" 
    DropDownListMembers.DataValueField = "memberno" 
    DropDownListMembers.DataBind() 
End Sub 

...但它不工作值得豆山 - 可能是因为该事件可能不会被解雇。它肯定好像它不是,无论如何 - 显然是因为DropDownListMembers和DropDownListCustomers都不被清除,DropDownListMembers也不会使用不同的项目组重新填充。

所以我的问题是,我怎么能重新填充“依赖” dropdownlists当一个人改变,但或许真正的问题应该是,“我怎样才能获得的SelectedIndexChanged()事件,火灾?

+1

DropDownLists是否将AutoPostBack设置为true? – N0Alias

+0

这似乎是在正确的方向迈出一步(不,他们不是 - 我想知道为什么他们不是默认的?)现在第二个和第三个下拉列表被清除了,至少这是一个开始- 谢谢! –

回答

1

的事件不是因为AutoPostBack属性没有设置为true。将它设置为true将确保每当用户更改所选项时它将触发SelectedIndexChanged处理程序。