我有一个 Datagridview
1 Drink1 Beef1
2 Drink2 Beef2
3 Drink3 Beef3
但现在我只想隐藏“Drink3”,其余保持不变。
我只知道如何隐藏/删除行和列,但不确定单个单元格是否可以。如果是的话,我应该在这里申请什么?我正在考虑一个 datagridview 事件,但找不到它是什么。
结果应该是这样的。
1 Drink1 Beef1
2 Drink2 Beef2
3 Beef3
如果您不想显示该值,可以将其清除。您现在
Cell
是只读的,您可以直接更改 Visible
。
dataGridView1.Rows[Your Row].Cells[Your Col].Value = null;
如果您需要单元格数据,您可以从
Data Table
获取。
您可以清除该值 - 但您也会从链接的数据源中删除它。
其他方法是设置该单元格的:
cell.CellStyle.ForeColor = cell.CellStyle.BackColor
cell.CellStyle.SelectionForeColor = cell.CellStyle.SelectionBackColor
从而使数据不可见。
但在这种情况下,用户仍然可以复制和粘贴该值,因此您必须禁用从该
DataGridView
整体复制值或拦截复制事件,如果用户从“禁止”单元格复制,只需取消该事件。
您可以在后端代码中更改单元格的样式,您可以将单元格的字符串值更改为
""
。
虽然您可能会按照建议隐藏结果,例如修改前景色和背景色,但我不推荐这样做。在某些情况下(例如突出显示的内容),它可能变得可见。
如果您将内容加载到
DataGridView
后不需要使用该内容,您可以直接在数据查询(SQL、LINQ)或DataTable
中删除内容。
如果您在加载
DataGridView
后必须在运行时处理内容,请克隆源 DataTable
,隐藏内容并显示新内容。人们可以找出更多方法来应用这一原则。
C#
DataTable dt;
dt = ds.table(0);
for (var ir = 0; ir <= dt.Rows.Count - 1; ir++)
{
DataRow dr = dt.Rows(ir);
if (CStr(dr("MyColumn")) = "Drink3")
{
dr("MyColumn") = " ";
}
}
this.DataGridView1.DataSource = dt;
VB:
Dim dt As DataTable
dt = ds.table(0)
For ir = 0 To dt.Rows.Count - 1
Dim dr As DataRow = dt.Rows(ir)
If CStr(dr("MyColumn")) = "Drink3" Then
dr("MyColumn") = " "
End If
Next
Me.DataGridView1.DataSource = dt
使用 Visual Studio 2022,我使用以下解决方案
cell.Style.ForeColor = Color.White
cell.Style.BackColor = Color.White
Kacper Turowski
的解决方案不起作用,因为
CellStyle
属性不存在!ForeColor
未更改时,从 BackColor
初始化 BackColor
不起作用!我的代码(例如)如下
Dim dr As SqlDataReader
Dim sPreviousNoCompte As String = ""
Do While dr.Read()
grid.Rows.Add()
With grid.Rows(iRow)
.Cells(0).Value = dr.Item("no_compte")
.Cells(1).Value = dr.Item("validated")
.Cells(2).Value = dr.Item("nom")
If .Cells(0).Value = sPreviousNoCompte Then
.Cells(0).Style.ForeColor = Color.White
.Cells(0).Style.BackColor = Color.White
End If
iRow += 1
sPreviousNoCompte = .Cells(0).Value
End With
Loop