Eyal
Eyal

Reputation: 1709

Change DataGrid column header text

I have a list of a specific class type Person and I want to make a DataGrid with it.

private void DataGrid_Loaded(object sender, RoutedEventArgs e) {
    List<Person> x; //Don't worry, x has data in it
    (sender as DataGrid).ItemsSource = x;
}

And the Person class:

class Person {
    string fName, lName;
}

After all this I get a table with the headers: "fName" and "lName". How can I change that to: "First Name" and "Last Name"?

Upvotes: 13

Views: 42607

Answers (6)

TC Anıl Aydınalp
TC Anıl Aydınalp

Reputation: 11

myDataGrid.Columns[0].Header="First Name";    
myDataGrid.Columns[1].Header="Last Name";

all them work for me but you have to put code after datagrid loaded

Upvotes: 0

pk_code
pk_code

Reputation: 2766

Try HeaderText instead of Header like this :

  myDataGrid.Columns[0].HeaderText="First Name";
  myDataGrid.Columns[1].HeaderText="Last Name";

Upvotes: 1

itzmebibin
itzmebibin

Reputation: 9439

Try this,

(sender as DataGrid).Columns[0].Header="First Name";
(sender as DataGrid).Columns[1].Header="Last Name";

Upvotes: 1

SamTh3D3v
SamTh3D3v

Reputation: 9944

Here the Right way to do it :

First Define an ObservableCollection in the codebehind that will hold a list of persons

Second Bind that list to the DataGrid ItemSource and Bind its properties

You can change what name to display on each column by simply disabling the AutoGenerateColumns and setting their names by your self

here the full code

<DataGrid ItemsSource="{Binding ListPersons}" AutoGenerateColumns="False">
      <DataGrid.Columns >
            <DataGridTextColumn Header="First Name" Binding="{Binding FName}"></DataGridTextColumn>
            <DataGridTextColumn Header="Last Name" Binding="{Binding LName}"></DataGridTextColumn>
      </DataGrid.Columns>
  </DataGrid>

and the code behind :

public class Person
{
    public String FName { get; set; }   
    public String LName { get; set; }   

}
public partial class MainWindow : Window
{
    public ObservableCollection<Person> ListPersons { get; set; }
    public MainWindow()
    {
        ListPersons=new ObservableCollection<Person>()
        {
            new Person()
            {
                FName = "FName1",
                LName = "LName1"
            },
             new Person()
            {
                FName = "FName2",
                LName = "LName2"
            }

        };
        this.DataContext = this;

    }


}

Upvotes: 20

Vecihi Baltacı
Vecihi Baltacı

Reputation: 352

if you use sql for getting data, I mean don't use entity framework you can use an Alias for your columns.

Upvotes: 2

apomene
apomene

Reputation: 14389

you can set :

 myDataGrid.Columns[0].Header="First Name";
 myDataGrid.Columns[1].Header="Last Name";

Upvotes: 21

Related Questions