System.NullReferenceException:“未将对象引用设置到对象的实例。” System.Windows.Forms.DataGridViewCellPaintingEventArgs.Value.get 返回 null。
合并单元格可以参考
https://www.cnblogs.com/bloodofhero/archive/2012/07/05/2578068.html
合并单元格函数
////// 合并同一列中值相同的相邻单元格 /// /// DataGridView /// 要合并的列的索引列表 /// 当前单元格的属性访问器 private void MergeCellInOneColumn(DataGridView dgv, ListcolumnIndexList, DataGridViewCellPaintingEventArgs e) { if (columnIndexList.Contains(e.ColumnIndex) && e.RowIndex != -1) { Brush gridBrush = new SolidBrush(dgv.GridColor); Brush backBrush = new SolidBrush(e.CellStyle.BackColor); Pen gridLinePen = new Pen(gridBrush); //擦除 e.Graphics.FillRectangle(backBrush, e.CellBounds); //画右边线 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); //画底边线 if ((e.RowIndex < dgv.Rows.Count - 1 && dgv.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString() != e.Value.ToString()) || e.RowIndex == dgv.Rows.Count - 1) { e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); } //写文本 if (e.RowIndex == 0 || dgv.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString() != e.Value.ToString()) { e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 5, StringFormat.GenericDefault); } e.Handled = true; } }
引用方法
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
List indexs = new List() { 0, 1 };
MergeCellInOneColumn(dataGridView1, indexs, e);
}



