M. *_*ain 18 c# datagridview winforms
我在网格中有一些数据,目前显示如下:
------------------
|Hd1| Value |
------------------
|A | A1 |
------------------
|A | A2 |
------------------
|A | A3 |
------------------
|A | A4 |
------------------
|B | B1 |
------------------
|B | B2 |
------------------
|B | B3 |
------------------
|B | B4 |
------------------
|B | B5 |
------------------
|C | C1 |
------------------
|C | C2 |
------------------
Run Code Online (Sandbox Code Playgroud)
我想让它看起来像这样:
|Hd | Value |
------------------
|A | A1 |
----------
| | A2 |
----------
| | A3 |
----------
| | A4 |
------------------
|B | B1 |
----------
| | B2 |
----------
| | B3 |
----------
| | B4 |
----------
| | B5 |
------------------
|C | C1 |
----------
| | C2 |
------------------
Run Code Online (Sandbox Code Playgroud)
有什么方法可以合并这些细胞吗?我在很多方面也试过谷歌但没有找到任何合适的方式.如果可以在不使用datagridview的情况下以另一种方式显示此数据,但结果是我展示的方式,这也将解决我的问题.
gha*_*deh 35
您必须先找到重复的值
需要两种方法:
bool IsTheSameCellValue(int column, int row)
{
DataGridViewCell cell1 = dataGridView1[column, row];
DataGridViewCell cell2 = dataGridView1[column, row - 1];
if (cell1.Value == null || cell2.Value == null)
{
return false;
}
return cell1.Value.ToString() == cell2.Value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,手绘:
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
if (e.RowIndex < 1 || e.ColumnIndex < 0)
return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None;
}
else
{
e.AdvancedBorderStyle.Top = dataGridView1.AdvancedCellBorderStyle.Top;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在单元格格式:
if (e.RowIndex == 0)
return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
e.Value = "";
e.FormattingApplied = true;
}
Run Code Online (Sandbox Code Playgroud)
并在form_load中:
dataGridView1.AutoGenerateColumns = false;
Run Code Online (Sandbox Code Playgroud)

DataGridView控件没有相关的属性或方法来合并单元格,但您可以使用自定义绘制完成相同的操作.您可以使用DataGridView.CellPainting事件或覆盖Paint方法.
此外,您还需要覆盖DataGridView.CellClick,CellEnter,CellFormatting和其他方法,以便为您的DataGridView提供全功能的功能.例如,对于单元格单击,整个合并的单元格(或构成合并单元格的单元格组)必须自定义绘制.
你可以在这里找到一些示例代码:
http://social.msdn.microsoft.com/forums/en-US/vbinterop/thread/5b659cbd-7d29-4da4-8b38-5d427c3762e2
http://forums.codeguru.com/showthread.php?415930-DataGridView-Merging-Cells
http://www.codeproject.com/Questions/152113/How-can-i-merge-DataGridView-Rows-Cells-with-Equal