Kru*_*non 2 c# datagridview winforms
我想从我的数据视图中隐藏一两个网格单元格。但是有了这段代码,所有的网格都被隐藏了,这不是我想要的。
我想从我的 Datagridview 中隐藏一两个矩形单元格。
我只想隐藏一个指定的单元格。
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
Run Code Online (Sandbox Code Playgroud)
隐藏或修改单元格边框样式的推荐方法是对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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,隐藏边框相当简单:只需隐藏右侧或底部边框;其他边框样式需要一些反复试验(或更深入的理解;-)
在这里,我首先为所有边设置样式,但是当它把底部涂成白色时(至少我认为它是这样),然后我将底部边框设置回单色。
您可能希望简化检查的方式;这只是一个简单的例子。
更新:
这是一个使合并更加动态的代码:使用该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;
}
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
更新 2:
如果您想将此应用于ColumnHeaders您需要先关闭dgv.EnableHeadersViualStyles..