DataGrid WPF Header Header

I have a populated DataTable (xDataTable) with 7 specific columns - the first column I want to use as my RowHeader.

I also have a DataGrid:

<DataGrid x:Name="DataGridX" ItemsSource="{Binding}" Grid.Row="0" CanUserAddRows="False" SelectionUnit="Cell" /> 

Then I set the DataContext of my DataGrid:

 DataGridX.DataContext = xDataTable; 

This all works, but how can I set the first column of my DataGrid as a RowHeader?

+5
source share
2 answers

Use the style below (normal case):

 <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> 

if you need a separate RowHeader for a single line, use:

 <DataGrid.RowStyle> <Style TargetType="{x:Type DataGridRow}"> <Setter Property="IsSelected" Value="{Binding IsRowSelected}" /> <Setter Property="Header" Value="{Binding Content}" /> </Style> </DataGrid.RowStyle> 

Just change the specified binding as needed.

if the first column

 <DataGridTextColumn Binding="{Binding Content}" Header="Content"/> 

delete this column and use this binding for the header.

+2
source

You can set any headers you want. Just add your columns:

  DataTable.Columns.Add("I am a Column Header!:)"); 

Let's see an example of 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"); } } } 

Your XAML:

 <DataGrid ItemsSource="{Binding EmployeeDataTable}" /> 

Update:

Check out the sample code:

Your XAML:

 <DataGrid Name="dataGrid"/> 

Your code:

 //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(); } 
-1
source

Source: https://habr.com/ru/post/1242603/


All Articles