从数据集中删除空白行

时间:2014-07-24 05:01:10

标签: c# datatable dataset

  ds.Tables.Add(dt);
  return ds;

在上面的代码片段中,我如何返回我的数据集但排除所有空白行,即空白意味着所有列中包含null或空字符串的行。

4 个答案:

答案 0 :(得分:2)

您必须事先进行检查,然后返回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;

答案 1 :(得分: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); });

答案 2 :(得分:0)

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

 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;

            }

答案 3 :(得分:0)

您可以尝试使用此方法在DataSet中循环DataTable:

    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;
            }
        }

    }