我想从我的datagriview中隐藏一个或两个网格单元。但是有了这段代码,所有的网格都被隐藏了,这不是我想要的。
我想在Datagridview中隐藏一个或两个矩形单元格。
我只想隐藏指定的单元格。
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
答案 0 :(得分:0)
建议隐藏或修改单元格边框样式的方法是对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;
}
}
请注意,隐藏边框相当简单:只需隐藏右侧或底部边框即可;其他边框样式需要反复试验(或加深理解;-)
在这里,我首先设置所有样式的样式,但是当它将botton涂成白色时(至少我认为是这样),然后将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:
如果要将其应用于ColumnHeaders
,则需要先关闭dgv.EnableHeadersViualStyles
。