C# 中的dataGridView控件动态添加自定义列,并绑定数据源

需求背景:数据源是一个类对象列表,但是类是根据业务变化的,就是说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;

        

你可能感兴趣的:(C#,c#,开发语言,winform)