2013-06-21 48 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