从缓存数据创建级联下拉列表

时间:2013-06-21 15:59:52

标签: c# asp.net caching drop-down-menu cascadingdropdown

在我的应用程序中,我编写了一个主要查询,如

 SqlDataAdapter cmd0 = new SqlDataAdapter(select a,b,c,d, from table1,sqlconn)

然后我缓存了这个查询,因为table1是一个非常庞大的表,我不希望每次用户进行一些更改时都调用数据库。

        DataSet ds0 = new DataSet();
        cmd0.Fill(ds0);
        DataView source0 = new DataView(ds0.Tables[0]);
        DataTable dt0 = new DataTable();
        cmd0.Fill(dt0);
        Cache["data"] = ds0;

我有a和b的2个下拉列表。 我得到缓存的列a并绑定下拉列表中的数据

 //dropdown for a
        DataSet dataset_a = new DataSet();
        dataset_a = (DataSet)Cache["data"];
        DataView dataview_a = dataset_a.Tables[0].DefaultView;
        dataview_a.Sort = "a";
        DataTable datatable_a = dataview_a.ToTable(true, "a");
        ddla.DataSource = datatable_a;
        ddla.DataTextField = "a";
        ddla.DataValueField = "a";
        ddla.DataBind();

现在我尝试按照与ddla相同的方式填充b的dropdownlist

//dropdown for b
        DataSet dataset_b = new DataSet();
        dataset_b = (DataSet)Cache["data"];
        DataView dataview_b = dataset_b.Tables[0].DefaultView;
        dataview_b.Sort = "b";
        DataTable datatable_b = dataview_b.ToTable(true, "b");
        ddlb.DataSource = datatable_b;
        ddlb.DataTextField = "b";
        ddlb.DataValueField = "b";
        ddlb.DataBind();

当我在ddla中更改我的选择时(a的下拉列表)我希望b的下拉列表也被更改。 (级联下拉列表)

所以基本上我想解雇查询:

Select b from table1 where a=ddla.SelectedItem.ToString()

但我不知道如何使用缓存数据。

请帮帮我!谢谢!!!

1 个答案:

答案 0 :(得分:1)

您无法绑定到相同的来源并希望获得您想要的结果。 为了得到你想要的东西你需要解开ddlb。而是,在SelectedIndexChanged的事件SelectedItemChangedddla上,您应该过滤数据表中的行并加载到ddlb。 实际上很少有这样做的方法。一,在数据集和使用关系中有2个表,一个组合绑定到表a,另一个绑定到表b。这样,当您点击a时,相关的行就会显示在b