28

How can I setup custom column names for DataGridView with associated DataSource?

Here is some code:

class Key
{
    public string Value { get; }
    public DateTime ExpirationDate { get; }
}

List<Key> keys = new List<Key>();
...// fill keys collection

DataGridView dataGridView = createAndInitializeDataGridView();
dataGridView.DataSource = keys;

This gives me dataGridView with column names "Value" and "ExpirationDate". How should I proceed to change names to "Key" and "Expire" for example?

DOK
  • 31,405
  • 7
  • 58
  • 91
Bobrovsky
  • 12,696
  • 19
  • 74
  • 122
  • If your data is coming from a database, you can change the column names in your SQL by aliasing them. – DOK Jun 03 '11 at 14:23

3 Answers3

56

Use the DisplayName attribute on your properties to specify column names in your DataGridView:

class Key
{
    [System.ComponentModel.DisplayName("Key")]
    public string Value { get; }
    [System.ComponentModel.DisplayName("Expire")]
    public DateTime ExpirationDate { get; }
} 
Jay Riggs
  • 51,115
  • 9
  • 133
  • 146
11

You should be able to change the header cells after you've set the datasource:

    if (dataGridView1.Columns["Value"] != null)
        dataGridView1.Columns["Value"].HeaderText = "Key";
    if (dataGridView1.Columns["Expiration"] != null)
        dataGridView1.Columns["Expiration"].HeaderText = "Expire";
TBohnen.jnr
  • 5,017
  • 1
  • 15
  • 25
0
public DataTable SetColumnsHeaderName(string[] TagName)
{
    DataTable dt = new DataTable();
    foreach (var item in TagName)
    {
        dt.Columns.Add(item);
    }
    return dt;
}

public void ShowDataGridView()
{
    string[] tag = new string[] { "First Name", "Last Name", "Phone Number", };
    //fill datatable columns Name
    var dt = SetColumnsHeaderName(tag);
    //connect db and fetch table name
    var listx = db.tablename.ToList();
    foreach (var item in listx)
    {
        dt.Rows.Add(new object[] { item.Name, item.Family, item.Phone });
    }
    datagridView.DataSource = dt;
}
Matt Ke
  • 2,612
  • 8
  • 21
  • 36
jamaljaj
  • 19
  • 3