gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:16:49 26 4
gpt4 key购买 nike

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

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

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

我只想隐藏一个指定的单元格。

dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;

最佳答案

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

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

这是一个例子:

enter image description here

请注意第 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;
}
}

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

在这里,我首先设置了所有边的样式,但是当它把按钮涂成白色时(至少我是这么认为的),然后我将按钮边框设置回单一。

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

更新:

下面是使合并更加动态的代码:使用 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..

关于c# - 在datagridview中隐藏指定的单元格边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com