Datagrid在wpf中绑定一个静态列并保持动态

时间:2012-03-26 08:00:12

标签: wpf dataset

我正在研究WPF,我必须绑定datagrid。如果有任何疑问,请尽量解释我的问题,然后请问。

我可以使用以下代码绑定datagrid:

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] .DefaultView;   ataGrid1.DataContext = dataset.Tables [0];

此代码为我提供了一个网格,其中包含从数据库传递的默认列名。

但问题是,在我的应用程序中,我有一个组合框,我必须选择列名,如column1,column2。在此选择的基础上,我必须仅将datagrid与这些列绑定,但在所有情况下我都需要我的静态列存在修改后的名称Date Recorded和rest selected column with default name。

由于

1 个答案:

答案 0 :(得分: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绑定到列的visibility属性,如果你只想让列不可见。