有的时候需要动态的添加datagridview 的列名:
System.Windows.Forms.DataGridViewTextBoxColumn[] Column = new DataGridViewTextBoxColumn[columnNum]; for (int i = 0; i < columnNum; i++) { Column[i] = new DataGridViewTextBoxColumn(); } Column[0].HeaderText = "检验单编号"; Column[0].Name = "检验单编号"; Column[0].ReadOnly = true; Column[0].DefaultCellStyle.BackColor = Color.LightSteelBlue; Column[0].ReadOnly = true; Column[1].HeaderText = "样本编号"; Column[1].Name = "样本编号"; int j = 2; foreach (DataRow row in dt.Rows) { if (j < columnNum) { Column[j].HeaderText = row["QCITEM_NAME"].ToString(); Column[j].Name = row["QCITEM_NAME"].ToString(); j++; } } this.dgv.Columns.AddRange(Column); this.ResumeLayout(false);
在动态添加行和列的时候最后不要直接给datagridview 赋值DataSource。直接赋值DataTable往往会出现问题。
也要动态的将DataTable转换为逐行添加数据
if (oldRowNum > 0) { foreach (DataRow row in ddt.Rows) { object[] Array = new object[columnNum]; for (int i = 0; i < columnNum; i++) { Array[i] = row[i]; } dgv.Rows.Add(Array); } }
还有一个重点就是在给datagridview 动态添加列的时候在添加完数据需要刷新,并清空datagridview 所有内容。
dgv.Columns.Clear();
清空完成之后再Datatable的结果逐行添加进去。