在我的应用程序中,我编写了一个主要查询,如
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()
但我不知道如何使用缓存数据。
请帮帮我!谢谢!!!
答案 0 :(得分:1)
您无法绑定到相同的来源并希望获得您想要的结果。
为了得到你想要的东西你需要解开ddlb
。而是,在SelectedIndexChanged
的事件SelectedItemChanged
或ddla
上,您应该过滤数据表中的行并加载到ddlb
。
实际上很少有这样做的方法。一,在数据集和使用关系中有2个表,一个组合绑定到表a
,另一个绑定到表b
。这样,当您点击a
时,相关的行就会显示在b