2012-03-26 66 views
0

我正在WPF上,我必須綁定datagrid.I盡我所能解釋我的問題,如果有任何疑問,然後請問。Datagrid綁定在一個靜態列wpf和休息動態

我能夠通過使用以下代碼綁定數據網格:

XAML視圖:

<DataGrid Height="257" HorizontalAlignment="Left" Margin="20,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="Auto"></DataGrid> 

CS視圖:

SqlDataAdapter da = new SqlDataAdapter("select staticcolumn,column1,column2,column3,column4 from TBL_SENSORS", connection); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "SensorZones"); 

dataGrid1.ItemsSource = dataset.Tables [0]。默認視圖; ataGrid1.DataContext = dataset.Tables [0];

此代碼給了我一個從數據庫傳遞的默認列名的網格。

但問題是,在我的應用程序中,我有一個組合框,從我必須選擇列名稱,如column1,column2.On這個選擇的基礎,我必須綁定datagrid與這些列,但在所有情況下,我希望我存在靜態列,其中修改了名稱「日期記錄」和其餘的默認名稱的選定列。

感謝

+0

爲什麼使用數據適配器?你是針對舊版本的C#嗎? – 2012-03-26 12:35:09

+0

嗨@ ExitMusic,這只是測試多數民衆贊成爲什麼我使用this.Do你有這個解決方案的任何想法? – Sunny 2012-03-26 15:58:04

+0

是否按照您希望的方式工作? – 2012-03-28 05:31:37

回答

0

個人而言,我更願意用linq

但是,你需要做的是基於有過在組合框中每個項目的一個單獨的查詢什麼。

喜歡的東西:

public string SelectedComboboxItem 
{ 
    get 
    { 
      return _selectedComboboxItem; 
    } 
    set 
    { 
     _selectedComboboxItem = value; 
     OnPropertyChanged(SelectedComboboxItem); 

     SqlDataAdapter da; 
     select (_selectedComboboxItem) 
     { 
       case "Column 1": 
        da = new SqlDataAdapter("select staticcolumn,column from TBL_SENSORS", connection); 


       case "Column 2": 
        da = new SqlDataAdapter("select staticcolumn,column2 from TBL_SENSORS", connection); 


      //All the other queries go here 

     } 

     DataSet ds = new DataSet(); 
     da.Fill(ds, "SensorZones"); 

     dataGrid1.ItemsSource = dataset.Tables[0].DefaultView; 
     dataGrid1.DataContext = dataset.Tables[0]; 
    } 
} 

所以你的組合框的選擇項綁定到該屬性(你需要實現INotifyPropertyChanged),然後你應該爲每個選擇不同的數據源。不幸的是,這應該重置數據網格,所以我不確定這是否是您要查找的內容。

或者,您可以創建一個轉換器,並將Combobox的selecteditem綁定到列的可見性屬性,如果您只是想使列不可見。