【问题标题】:How to remove row which has one or more empty or null cell?如何删除具有一个或多个空单元格或空单元格的行?
【发布时间】:2011-02-18 22:55:45
【问题描述】:

我的 winform 上有 datagridview。我在 datagridview 中显示记录。现在,在 datagridview 上显示记录后,我想从 datagridview 中删除该行,该行具有一个或多个在该行的单元格中没有值的空单元格。因此,如果有任何单元格为空或为空,我将检查每一行的每个单元格,然后我使用RemoveAt() 函数删除这些行。

我的代码是:

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    if (string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[j].Value.ToString()))
                    {
                        dataGridView1.Rows.RemoveAt(i);
                        break;
                    }
                }
            }

那么问题是它不能正常工作,它没有删除所有具有空单元格的行。那我该怎么办呢?

【问题讨论】:

  • 你不是在这里问问题。结束不是一个真正的问题。
  • @Oded,对不起先生,我不明白。为什么要关闭?
  • @Oded - 我很清楚问题是什么。 OP 想要从数据网格视图中删除不止一行。
  • @David Hall - 问题已被编辑,稍后添加。
  • 您是想从 DataGridView 中删除该行(这样它就消失了),还是从 DataSource 中删除(这样它就真的消失了)?

标签: c# winforms datagridview


【解决方案1】:

做你想做的最简单的方法是反向循环遍历 datagridview 行。这样您的索引就会保持正确。

for (int i = dataGridView1.Rows.Count -1; i >= 0; i--)
{
    DataGridViewRow dataGridViewRow = dataGridView1.Rows[i];

    foreach (DataGridViewCell cell in dataGridViewRow.Cells)
    {
        string val = cell.Value as string;
        if (string.IsNullOrEmpty(val))
        {
            if (!dataGridViewRow.IsNewRow)
            {
                dataGridView1.Rows.Remove(dataGridViewRow);
                break;
            }
        }            
    }
}

我正在做一些您可能不需要做的额外事情(代码只是从我的测试应用程序中剪切和粘贴的)

  • 我通常将相关行抓取到 DataGridViewRow 对象中。
  • 我正在检查 IsNewRow 属性,因为我的网格是可编辑的。
  • 我正在将该值分配给一个字符串变量(使用 as 进行转换),因为您使用它的方式为我抛出了异常。

【讨论】:

  • @David Hall,但是先生,这会删除所有行。
  • @Harikrishna - 上面的代码不会检查单元格中的空单元格,但您已经拥有的代码会这样做。我刚刚演示了如何在删除行时处理不断变化的索引。
  • 此最新编辑包含检查空单元格的代码。您可能会遇到不同列类型(如复选框或组合框)的问题,但您需要解决这些问题。
  • @David Hall,在检查反向时发生了什么dataGridViewRow.Cells[0].Value as string; 每次都是空的。所以它会删除所有行。我不明白为什么每行的第一个单元格为空?
  • @Harikrishna 没有更多信息,我无法真正为您调试。第 0 列的类型是什么?是空的吗?你可能有隐藏的列吗?还要注意我如何在单元格上使用 foreach,并删除了索引引用。 (我还修复了一个错误,我使用的是 continue 而不是 break)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多