在datagridview中隐藏指定的单元格边框?

我想隐藏我的datagriview中的一个或两个网格单元格。 但是使用这段代码,所有的网格都被隐藏了,这不是我想要的。

我想隐藏我的Datagridview中的一个或两个矩形单元格。

我不想隐藏包含我的单元格的列或数据。

我只是想隐藏一个特定的细胞。

dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None; 

隐藏或修改单元格边框样式的推荐方法是对CellPainting事件进行编码。

别担心,不需要实际绘画。 您需要做的就是在e.AdvancedBorderStyle参数中设置几个字段。

这是一个例子:

在此处输入图像描述

注意第3列中单元格的“垂直合并”外观; 同样适用于底部的“水平合并”单元格。 也是第5列中单元格的双边框。

 private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.ColumnIndex == 2 && e.RowIndex == 6) e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; if (e.ColumnIndex == 2 && e.RowIndex == 1) e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; if (e.ColumnIndex == 4 && e.RowIndex == 4) { e.AdvancedBorderStyle.All = DataGridViewAdvancedCellBorderStyle.InsetDouble; e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Single; } } 

请注意,隐藏边框非常简单:只需隐藏右边框或底边框; 其他bordertyles需要一些试验和错误(或更深入的理解;-)

在这里,我首先为所有方面设置样式,但是当它描绘出白色(至少这是我认为的那样)时,我将botton边框设置为单个。

您可能希望简化检查的完成方式; 这只是一个简单的例子。

更新

下面是一个使合并更加动态的代码:使用mergeCells函数将单元格标记为与其右邻居或底邻居合并或取消合并:

 private void mergeCells(DataGridViewCell cell, bool mergeH, bool mergeV) { string m = ""; if (mergeH) m += "R"; // merge horizontally by hiding the right border line if (mergeV) m += "B"; // merge vertically by hiding the bottom border line cell.Tag = m == "" ? null : m; } 

CellPainting现在看起来像这样:

 private void customDGV1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; DataGridViewCell cell = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex]; if (cell.Tag == null) return; string hide = cell.Tag.ToString(); if (hide.Contains("R")) e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; else e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single; if (hide.Contains("B")) e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; else e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Single; } 

更新2:

如果要将其应用于dgv.EnableHeadersViualStyles需要先关闭dgv.EnableHeadersViualStyles