2012-03-26 70 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绑定到列的可见性属性,如果您只是想使列不可见。