首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当“主”下拉列表发生更改时,如何重新填充“依赖”下拉列表?

当“主”下拉列表发生更改时,如何重新填充“依赖”下拉列表?
EN

Stack Overflow用户
提问于 2017-04-13 20:47:26
回答 1查看 52关注 0票数 1

我有三个下拉列表,其中第二个列表的内容取决于第一个下拉列表中选择的内容,第三个下拉列表的内容取决于第二个下拉列表中选择的内容。当第一次显示页面时,这是可行的:

代码语言:javascript
运行
复制
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

...but我需要第二个下拉列表在第一个选项发生更改时更新,第三个下拉列表需要在第二个选择发生更改时更新。我有这样的代码来实现这个目标:

代码语言:javascript
运行
复制
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

...but --它不值得一堆豆子--可能是因为这个事件可能不会触发。无论如何,它看起来确实不是--这是显而易见的,因为DropDownListMembers和DropDownListCustomers都没有被清除,DropDownListMembers也没有用一组不同的项重新填充。

因此,我的问题是,当一个变量发生变化时,我如何重新填充“依赖的”下拉列表,但问题可能真的应该是,“如何才能触发SelectedIndexChanged()事件?”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-13 21:15:47

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43401432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档