【问题标题】:remove blank cells from datatable从数据表中删除空白单元格
【发布时间】:2013-08-17 13:43:19
【问题描述】:

我有以下数据表:

如图所示,该数据表中有一些空白单元格。

我想删除它们并只显示具有值的单元格。

我尝试了以下代码,但没有成功:

For i=0 to dt.Rows.count-1

For j=0 to dt.Column.count-1


if dt.rows(i).tostring()="" then

dt.rows.remove(i)

end if

next

Next

此代码不起作用。请帮帮我。

用 c# 回答也可以帮助我。

【问题讨论】:

  • 你的语言是什么?? c# 还是 VB.net??
  • 我的 lang 是 vb,但是 c# 的 ans 也可以帮助我
  • 这个空白单元格是从哪里来的??你怎么填满你的桌子???

标签: c# .net vb.net winforms visual-studio-2008


【解决方案1】:

理想情况下,您只想在所有单元格都为空时删除一行。即使其中的单个单元格为空,您显示的算法也会删除该行。你应该像这样改变你的代码:

首先删除空行:

For i = 0 To dt.Rows.Count - 1
    flag = True

    For j = 0 To dt.Columns.Count - 1
        If Not(dt.Rows(i).IsNull(j)) AndAlso dt.Rows(i)(j).ToString() <> "" Then
            flag = False
            Exit For
        End If
    Next

    If flag Then dt.Rows(i).Delete()
Next

dt.AcceptChanges()

现在删除空列:

For i = 0 To dt.Columns.Count - 1
    flag = True

    For j = 0 To dt.Rows.Count - 1
        If Not(dt.Rows(j).IsNull(i)) AndAlso dt.Rows(j)(i).ToString() <> "" Then
            flag = False
            Exit For
        End If
    Next

    If flag Then dt.Columns.RemoveAt(i)
Next

dt.AcceptChanges()

【讨论】:

  • 这会删除顶部的空行,但不会删除列。
  • @FarhanMukadam:更新了我的答案。
【解决方案2】:

你最好先删除列:

dt.Columns.OfType<DataColumn>()
          .Where(c=>!dt.Rows.OfType<DataRow>()
                            .Any(r=>r.Field<string>(c.ColumnName) != ""))
          .ToList()
          .ForEach(c=>dt.Columns.Remove(c));

//Remove rows
dt.Rows.OfType<DataRow>()
       .Where(r=>!dt.Columns.OfType<DataColumn>()
                            .Any(c=>r.Field<string>(c.ColumnName) != ""))
       .ToList()
       .ForEach(r=>dt.Rows.Remove(r));

【讨论】: