【问题标题】:Remove blank row from dataset从数据集中删除空白行
【发布时间】:2014-07-24 05:01:10
【问题描述】:
  ds.Tables.Add(dt);
  return ds;

在上面的代码 sn-p 中,我如何返回我的数据集但排除所有空白行,即空白表示所有列中包含 null 或空字符串的行。

【问题讨论】:

  • 对于 null 的检查,所有列都应该是字符串类型

标签: c# datatable dataset


【解决方案1】:

您必须事先进行检查,然后返回 DataTable,如下所示(示例)

for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
    if (dt.Rows[i]["col1"] == DBNull.Value && dt.Rows[i]["col2"] == DBNull.Value)
     {
        dt.Rows[i].Delete();
     }
}
dt.AcceptChanges();
ds.Tables.Add(dt);
return ds;

【讨论】:

  • 在这种情况下,您假设表将只有两列。如果表有 500 列,那么在 if 语句中比较每一列是没有效率的,这会使它变得更冗长
  • 迭代语句中也可以不删除行
  • 首先,你没看答案吗?我说了一个示例/示例..这将使 OP 很好地开始。其次,再次检查确认是否可以在迭代中删除行。
  • "第二,再次确认是否可以删除迭代中的行。"由于它是 foreach 遍历行,因此您显然不能。你应该得到 InvalidOperationException。
【解决方案2】:

如果有人偶然发现这篇文章,这是我想出的解决方案:

// REMOVE ALL EMPTY ROWS
dt_Parsed.Rows.Cast<DataRow>().ToList().FindAll(Row =>
    { return String.IsNullOrEmpty(String.Join("", Row.ItemArray)); }).ForEach(Row =>
        { dt_Parsed.Rows.Remove(Row); });

【讨论】:

  • 或:dt.Rows.Cast&lt;DataRow&gt;().ToList().FindAll(row =&gt; string.IsNullOrEmpty(string.Join("", row.ItemArray))).ForEach(row =&gt; { dt.Rows.Remove(row); });
  • 或:dt.Rows.Cast&lt;DataRow&gt;().Where(w =&gt; !w.ItemArray.All(a =&gt; a is null || string.IsNullOrWhiteSpace(a as string?? a.ToString())))
【解决方案3】:

这里有帮助函数,其中传递你想要删除所有空列的数据行的表(这里我假设所有字符串都是字符串类型,那么它会起作用) 对于其他类型,您可以检查数据列类型,然后进行相关检查。

 public DataTable DeleteEmptyRows(DataTable dt)
            {
                DataTable formattedTable = dt.Copy();
                List<DataRow> drList = new List<DataRow>();
                foreach (DataRow dr in formattedTable.Rows)
                {
                    int count = dr.ItemArray.Length;
                    int nullcounter=0;
                    for (int i = 0; i < dr.ItemArray.Length; i++)
                    {
                        if (dr.ItemArray[i] == null || string.IsNullOrEmpty(Convert.ToString(dr.ItemArray[i])))
                        {
                            nullcounter++;
                        }
                    }

                    if (nullcounter == count)
                    {
                        drList.Add(dr);
                    }
                }

                for (int i = 0; i < drList.Count; i++)
                {
                    formattedTable.Rows.Remove(drList[i]);
                }
                formattedTable.AcceptChanges();

                return formattedTable;

            }

【讨论】:

    【解决方案4】:

    您可以尝试使用此方法循环DataSet中的DataTables:

        public void Clear_DataTableEmptyRows(DataTable dataTableControl)
        {
    
            for (int i = dataTableControl.Rows.Count - 1; i >= 0; i--)
            {
                DataRow currentRow = dataTableControl.Rows[i];
    
                foreach (var colValue in currentRow.ItemArray)
                {
                    if (!string.IsNullOrEmpty(colValue.ToString()))
                        break;
    
                    dataTableControl.Rows[i].Delete();
                    break;
                }
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      相关资源
      最近更新 更多