Заголовок строки DataGrid WPF
у меня есть заполненный DataTable (xDataTable) с 7 определенными столбцами - первый столбец, который я хочу использовать в качестве моего RowHeader.
у меня также есть DataGrid:
<DataGrid x:Name="DataGridX" ItemsSource="{Binding}" Grid.Row="0"
CanUserAddRows="False" SelectionUnit="Cell" />
затем я устанавливаю DataContext моего DataGrid:
DataGridX.DataContext = xDataTable;
все это работает, но как я могу установить первый столбец моего DataGrid в качестве RowHeader?
2 ответов
используйте стиль ниже (обычный случай):
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},Path=Columns[0].Header,Mode=OneTime}" />
</Style>
</DataGrid.RowHeaderStyle>
если мы хотим отдельный RowHeader для отдельной строки, используйте:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="IsSelected" Value="{Binding IsRowSelected}" />
<Setter Property="Header" Value="{Binding Content}" />
</Style>
</DataGrid.RowStyle>
просто измените вышеуказанную привязку по мере необходимости.
Если первая колонка:
<DataGridTextColumn Binding="{Binding Content}" Header="Content"/>
затем удалите этот столбец и используйте эту привязку для заголовка.
вы можете установить любые заголовки, что вы хотите. Просто добавьте свои столбцы так:
DataTable.Columns.Add("I am a Column Header!:)");
давайте посмотрим пример MVVM:
public class YourViewModel : ViewModelBase
{
public YourViewModel()
{
PopulateDataTable();
}
private void PopulateDataTable()
{
var _ds = new DataSet("Test");
employeeDataTable = new DataTable();
employeeDataTable = _ds.Tables.Add("DT");
for (int i = 0; i < 20; i++)
{
//you can set any Header in the following line
employeeDataTable.Columns.Add(i.ToString());
}
for (int i = 0; i < 10; i++)
{
var theRow = employeeDataTable.NewRow();
for (int j = 0; j < 20; j++)
{
theRow[j] = "a";
}
employeeDataTable.Rows.Add(theRow);
}
}
private DataTable employeeDataTable;
public DataTable EmployeeDataTable
{
get { return employeeDataTable; }
set
{
employeeDataTable = value;
OnPropertyChanged("EmployeeDataTable");
}
}
}
ваш XAML:
<DataGrid ItemsSource="{Binding EmployeeDataTable}" />
обновление:
давайте посмотрим код примера:
ваш XAML:
<DataGrid Name="dataGrid"/>
код:
//constructor of the Window
public MainWindow()
{
InitializeComponent();
PopulateDataGrid();
}
DataTable employeeDataTable = new DataTable();
private void PopulateDataGrid()
{
var _ds = new DataSet("Test");
employeeDataTable = _ds.Tables.Add("DT");
for (int i = 0; i < 10; i++)//create columns
{
employeeDataTable.Columns.Add("I am a column!:)");
}
for (int i = 0; i < 50; i++)//fill data to rows
{
var theRow = employeeDataTable.NewRow();
for (int j = 0; j < 10; j++)
{
if (j % 2 == 0)
theRow[j] = "a";
else
theRow[j] = "b";
}
employeeDataTable.Rows.Add(theRow);
}
dataGrid.ItemsSource = employeeDataTable.AsDataView();
}