如何隐藏DataGridView中特定单元格的数据

问题描述 投票:0回答:5

我有一个 Datagridview

1    Drink1    Beef1
2    Drink2    Beef2
3    Drink3    Beef3

但现在我只想隐藏“Drink3”,其余保持不变。

我只知道如何隐藏/删除行和列,但不确定单个单元格是否可以。如果是的话,我应该在这里申请什么?我正在考虑一个 datagridview 事件,但找不到它是什么。

结果应该是这样的。

1    Drink1    Beef1
2    Drink2    Beef2
3              Beef3
c# winforms datagridview
5个回答
0
投票

如果您不想显示该值,可以将其清除。您现在

Cell
是只读的,您可以直接更改
Visible

dataGridView1.Rows[Your Row].Cells[Your Col].Value = null;

如果您需要单元格数据,您可以从

Data Table
获取。


0
投票

您可以清除该值 - 但您也会从链接的数据源中删除它。


其他方法是设置该单元格的:

  • cell.CellStyle.ForeColor = cell.CellStyle.BackColor
  • cell.CellStyle.SelectionForeColor = cell.CellStyle.SelectionBackColor

从而使数据不可见。

但在这种情况下,用户仍然可以复制和粘贴该值,因此您必须禁用从该

DataGridView
整体复制值或拦截复制事件,如果用户从“禁止”单元格复制,只需取消该事件。


0
投票

您可以在后端代码中更改单元格的样式,您可以将单元格的字符串值更改为

""


0
投票

虽然您可能会按照建议隐藏结果,例如修改前景色和背景色,但我不推荐这样做。在某些情况下(例如突出显示的内容),它可能变得可见

如果您将内容加载到

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

0
投票

使用 Visual Studio 2022,我使用以下解决方案

cell.Style.ForeColor = Color.White
cell.Style.BackColor = Color.White

Kacper Turowski
的解决方案不起作用,因为

  1. CellStyle
    属性不存在!
  2. 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
© www.soinside.com 2019 - 2024. All rights reserved.