【问题标题】:Dropdownlist-hierarchy with SQLdatasource带有 SQLdatasource 的下拉列表层次结构
【发布时间】:2012-04-05 07:55:39
【问题描述】:

在我的 ASP.NET 文件夹中,我有 3 个下拉框,其中填充了具有 3 个不同 SQL 数据源的各种类别。每个下拉列表都取决于它上面的那个。
这个东西的用意是,在 dropdownlist1 中选择了某个东西后,dropdownlist2 中的数据源发生了变化。所以 dropdown2 中的数据取决于 dropdown1 中的选定值。而 dropdown3 中的数据取决于 dropdown2 中选择的值。
第一次,这一切都很好用。但是当我在 dd1 中选择一个值,然后在 dd2 中选择一个值时,它开始失败。
例如,当我在 dropdown1 中第二次更改该值时,其他下拉列表不会改变。

提前谢谢回复

【问题讨论】:

    标签: c# asp.net sqldatasource


    【解决方案1】:

    要做到这一点,您需要确保您的顶级下拉列表只填充一次,因此将其放在页面加载中,并在其周围加上 !isPostback。 然后在该顶级下拉列表上附加一个 OnSelectedIndexChanged() 事件,并在其中确保在设置新数据源之前清除二级下拉列表中的项目。

    然后在第二级下拉列表中使用 OnSelectedIndexChanged(),并确保在填充之前清除第三级。

    那么第三个就不需要任何事件了。

    【讨论】:

    • thx m8 它已经帮助了很多 ^^ 现在当我第二次重新选择某些东西时又出现了另一个问题,它将新项目添加到以前的项目中。有没有办法完全清除下拉列表(除了第一个值为 0 且文本为“在此处进行选择”的项目)?
    • 酷,我已经做过很多次那个场景了,但我记得前几次很棘手
    • 我会使用 ddlMyDropDownList.Items.Clear() 清除整个下拉列表,然后使用 ddlMyDropDownList.Items.Add(New ListItem("0", "Make a Choice"))
    • 我只是想提一下(对于有同样问题的未来读者)我使用了 ddList1.Items.Insert(0, new ListItem("0", "Make a Choice"));而不是 **.Add(new ListItem("0", "Make a Choice")) 我这样做是因为我希望能够选择添加新列表项的位置。如果您改用 Add(),它只会将新 Item 推到列表底部。
    【解决方案2】:

    将填写dd2的代码放在dd1OnSelectedIndexChanged中,对dd2OnSelectedIndexChanged执行同样的操作(填写dd3)。

    【讨论】:

      【解决方案3】:

      通过键连接的 2 个不同表的代码示例,在此示例中:companyID。

      public partial class Default : Page
      {
          public void Page_Load(object sender, EventArgs e)
          {
              if (!IsPostBack)
              {
                  var datacontext = new DataClasses1DataContext();
                  List<Company> companies = datacontext.Companies.ToList();
                  DropDownList1.DataSource = companies;
                  DropDownList1.DataValueField = "CompanyID";
                  DropDownList1.DataTextField = "CompanyName";
                  DropDownList1.DataBind();
              }
          }
      
          public void DropDownList1SelectedIndexChanged(object sender, EventArgs e)
          {
              using (var dc = new DataClasses1DataContext())
              {
                  DetailsView2.DataSource = null;
                  DetailsView2.DataBind();
      
                  DetailsView1.DataSource = dc.Companies.Where(d => d.CompanyID.Equals(DropDownList1.SelectedValue)).ToList();
                  DetailsView1.DataBind();
      
                  List<Contact> contacts = 
                  dc.Contacts.Where(d => d.CompanyID.Equals(DropDownList1.SelectedValue)).ToList();            
                  DropDownList2.DataSource = contacts;
                  DropDownList2.DataTextField = "LastName";
                  DropDownList2.DataValueField = "ContactID";
                  DropDownList2.DataBind();
      
                  if (contacts.Any())
                  {
                      DetailsView2.DataSource = dc.Contacts.Where(c => c.ContactID.Equals(DropDownList2.SelectedValue)).ToList();
                      DetailsView2.DataBind();
                  }
      
              }
          }
      
          public void DropDownList2SelectedIndexChanged(object sender, EventArgs e)
          {
              using (var dc = new DataClasses1DataContext())
              {
                  DetailsView2.DataSource = dc.Contacts.Where(c => c.ContactID.Equals(DropDownList2.SelectedValue)).ToList();
                  DetailsView2.DataBind();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多