C# 如何在由数据库填充的DataGridView中使用自己的头名称?
我正在尝试在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 =
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);
}
}