C# 如何在由数据库填充的DataGridView中使用自己的头名称?

C# 如何在由数据库填充的DataGridView中使用自己的头名称?,c#,winforms,datagridview,sqlite,C#,Winforms,Datagridview,Sqlite,我正在尝试在DataGridView中使用我自己的标题文本,它是从数据库自动填充的。我已经尝试了dataGridView1.AutoGenerateColumns=false,然后执行类似于创建列的操作: void createSearchResultHeader() { foreach(var prop in typeof(DB.Message).GetProperties()) { var display =

我正在尝试在DataGridView中使用我自己的标题文本,它是从数据库自动填充的。我已经尝试了
dataGridView1.AutoGenerateColumns=false
,然后执行类似于创建列的操作:

    void createSearchResultHeader()
    {
        foreach(var prop in typeof(DB.Message).GetProperties())
        {
            var display =
               typeof(DB.Message)
               .GetProperty(prop.Name)
               .GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), inherit: false)
               .FirstOrDefault() as System.ComponentModel.DisplayNameAttribute;
            DataGridViewColumn col = new DataGridViewTextBoxColumn();
            col.HeaderText = display.DisplayName;
            dataGridView1.Columns.Add(col);
        }
    }
然后使用以下内容加载结果:

            using (var conn = createConnection())
            using (var da = new SQLiteDataAdapter(createCommand(conn)))
            using (var dt = new DataSet())
            {
                dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
                da.Fill(dt);
                dg.DataSource = dt.Tables[0].DefaultView;
            }
问题是,使用
dataGridView1.AutoGenerateColumns=false
创建列(我在加载表单时调用
createSearchResultHeader()
)但是来自数据库的结果是空的,但是如果我更改
dataGridView1.AutoGenerateColumns=true
则来自数据库的结果会成功加载,但它会添加自己的列,而不是使用由
createSearchResultHeader()创建的列。如何解决此问题?

您必须设置:


哇!太简单了!谢谢:)
void createSearchResultHeader()
{
    foreach(var prop in typeof(DB.Message).GetProperties())
    {
        var display =
           typeof(DB.Message)
           .GetProperty(prop.Name)
           .GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), inherit: false)
           .FirstOrDefault() as System.ComponentModel.DisplayNameAttribute;
        DataGridViewColumn col = new DataGridViewTextBoxColumn();
        col.HeaderText = display.DisplayName;
        col.DataPropertyName = prop.Name; // Add this
        dataGridView1.Columns.Add(col);
    }
}