C#动态添加DataGridView列和行

在WinForm的C#应用中,DataGridView作为重要的数据组织和显示控件,作用极大。在DataGridView的数据组织时,一般都采用数据源绑定的方式(DataSource)与DataSet、Datatable或List来组织,很少出现不使用DataSource而动态添加的方式。所以网上有关这方面的介绍比较少或太简单,并且实用的例子很少。这次有同学有个需求问我要一个处理这种动态添加列和添加列的方法。下面就选取涉及动态组织DataGridView实例部分列示如下,供参考:

        private void GetDGVData()
        {
            dataGridView1 = DynamicCreationDGV(dataGridView1);
        }

        private DataGridView DynamicCreationDGV(DataGridView dgv)
        {
            if (dgv == null)
                return null;
            if (dgv.ColumnCount != 0)
                dgv.Columns.Clear();    //清除现有列

            #region 组织 DataGridViewColumn
            for (int i = 0; i < 6; i++) //指定总列数
            {
                //列名和列头名
                string dgvColName = "Col"+i;
                string dgvColHeaderText = string.Empty;

                if (i<=4)   //设置部分列头名
                    dgvColHeaderText = "Header_"+i;

                DataGridViewColumn dgvcolumn = new DataGridViewColumn();
                if (i == 3) //特殊列设置
                {
                    dgvcolumn = new DataGridViewCheckBoxColumn();   //指定列类型
                    dgvcolumn.ValueType = typeof(bool);             //指定列数据类型
                }
                else
                {
                    dgvcolumn = new DataGridViewTextBoxColumn();    //列默认类型
                    dgvcolumn.ValueType = typeof(string);           //列数据类型默认字符串
                }
                if (i == 5) //指定列数据类型
                    dgvcolumn.ValueType = typeof(int);

                dgvcolumn.Name = dgvColName;                        //列名
                dgvcolumn.HeaderText = string.IsNullOrEmpty(dgvColHeaderText) ? dgvColName : dgvColHeaderText;  //列头名

                dgv.Columns.Add(dgvcolumn); //增加列
            }
            #endregion
            #region 组织DataGridViewRow
            for (int i = 0; i < 10; i++)    //组织指定数据行
            {
                DataGridViewRow dr = new DataGridViewRow();
                dgv.Rows.Add(dr);           //增加行
                for (int j = 0; j < dgv.ColumnCount-1; j++) //部分列
                {
                    if(j==3)                //特殊数据列。此处可据列的ValueType属性来处理不同类型数据及格式
                        dgv.Rows[i].Cells[j].Value = true;
                    else
                        dgv.Rows[i].Cells[j].Value = "Cell" + i + "_" + j;
                }
                dgv.Rows[i].Cells[dgv.ColumnCount - 1].Value = dgv.ColumnCount - 1; //最后一列
            }
            #endregion
            return dgv;
        }

此例是根据实例提取,并依例亲测,无问题通过。您在实际应用时可根据需要修改即可。

posted @ 2020-08-04 09:52  老瓷  阅读(6369)  评论(0编辑  收藏  举报