2013-06-21 46 views
0

在我的应用程序级联下拉列表我已经写了像创建缓存数据

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

然后主查询我已经缓存此查询,因为表1是一个非常巨大的表,我不想调用数据库,每次用户进行一些更改。

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

我有2个下拉列表a和b。 我得到的缓存列,并在dropdownlists

//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

//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(); 

当我改变到以同样的方式initally填充下拉列表对于B绑定数据我在ddla中选择(dropdownlist为a)我想要b的下拉列表也被改变。 (层叠dropdownlists)

所以基本上我想火象查询:

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

,但我不硝酸钾如何使用缓存的数据做。

请帮帮我!谢谢!!!

回答

1

你不能绑定到同一个源,并期望得到你要找的结果。 为了得到你想要的东西,你需要解除绑定ddlb。相反,在事件SelectedIndexChangedSelectedItemChangedddla您应该过滤数据表中的行并加载到ddlb。 实际上很少有这样做的方法。一个是在数据集和使用关系中有两个表,一个组合绑定到表a,另一个绑定到表b。这样,当你点击a时,相关的行将出现在b

+0

非常感谢你。绑定dd1b并将其与SelectedIndexChanged事件上的dataview.rowfilter再次绑定!从早上起就一直打破我的头脑!再次感谢你。 – Ankita