带有关联数据源的DataGridView自定义列名

31

我该如何设置DataGridView的自定义列名并关联DataSource?

以下是一些代码:

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;

这给我带来了一个名为"Value"和"ExpirationDate"的dataGridView。我该如何继续将它们更改为例如"Key"和"Expire"的名称?


如果您的数据来自数据库,您可以通过别名更改SQL中的列名。 - DOK
3个回答

65

在你的属性上使用DisplayName特性来指定DataGridView中的列名:

class Key
{
    [System.ComponentModel.DisplayName("Key")]
    public string Value { get; }
    [System.ComponentModel.DisplayName("Expire")]
    public DateTime ExpirationDate { get; }
} 

如果我基于此对象创建新对象(例如通过内部连接),则此方法无法正常工作。 - TK-421

11

在设置了数据源之后,您应该能够更改标题单元格:

    if (dataGridView1.Columns["Value"] != null)
        dataGridView1.Columns["Value"].HeaderText = "Key";
    if (dataGridView1.Columns["Expiration"] != null)
        dataGridView1.Columns["Expiration"].HeaderText = "Expire";

1
谢谢你的回答。它有效了,但是Jay Riggs给出了另一个我更喜欢的答案。 - Bobrovsky
1
很酷,是的,我也更喜欢他的,这就存进记忆库了 :-) - TBohnen.jnr

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接