我正在研究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。
由于
答案 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),然后您应为每个选择使用不同的数据源。不幸的是,这应该重置数据网格,所以我不确定这是否是您正在寻找的。 p>
或者你可以创建一个转换器并将Combobox的selecteditem绑定到列的visibility属性,如果你只想让列不可见。