需求背景:数据源是一个类对象列表,但是类是根据业务变化的,就是说datagridview控件显示的时候列名和列的个数是不同的。这里我们就需要使用代码动态的去创建列名,并使用反射机制将每一列的数据来源绑定到对应类的字段名上,这样相比在设计器中去创建多个控件要方便很多。
以下是核心代码,这里只记录一种情况, 以备参考:
BindingSource bings = new BindingSource();
bings.DataSource = recordList;
PropertyInfo[] fields = typeof(ReplayModel).GetProperties();
string[] freColumnName = new string[] { "id", "节点id", "设备id", "记录个数" };
DataGridView dataGridView = new DataGridView();
dataGridView.ColumnCount = freColumnName.Length;
dataGridView.RowHeadersVisible = false;
for (int i = 0; i < freColumnName.Length; i++)
{
dataGridView.Columns[i].Name = freColumnName[i];
dataGridView.Columns[i].DataPropertyName = fields[i].Name;
dataGridView.Columns[i].HeaderText = freColumnName[i]; //显示名称
}
dataGridView.Columns[freColumnName.Length - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Dock = DockStyle.Fill;
panel2.Controls.Add(dataGridView);
dataGridView.Rows?.Clear();
dataGridView.DataSource = bings;
dataGridView.ColumnHeadersVisible = true;
版权声明:本文为yunxiaobaobei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。