在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
。