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

时间:2019-07-11 09:37:12

标签: c# winforms datagridview

我有一个Datagridview

ValidationError: 2 validation errors
name
  'name' must be str, not int (type=type_error)
name
  'name' must be str, not int (type=type_error)

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

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

结果应如下所示。

1    Drink1    Beef1
2    Drink2    Beef2
3    Drink3    Beef3

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果只不想显示该值,则可以清除它。您现在Cell是只读的,您可以直接更改Visible

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

如果您需要单元格数据,则可以通过Data Table来实现。

答案 2 :(得分:0)

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


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

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

因此使数据不可见。

但是在这种情况下,用户仍然可以复制并粘贴值,因此您必须从整个DataGridView禁用复制值或拦截复制事件,并且如果用户正在从“禁止”单元格复制,则只需取消活动。

答案 3 :(得分:0)

尽管您可能会将结果隐藏为未处理的内容,例如修改前色和底色,但我不建议这样做。在某些情况下(例如,高亮显示的内容),它可能会变得可见

如果将内容加载到DataGridView之后不需要使用内容,则可以直接在数据查询(SQL,LINQ)或DataTable中删除内容。< / p>

如果在加载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