【发布时间】:2014-07-24 05:01:10
【问题描述】:
ds.Tables.Add(dt);
return ds;
在上面的代码 sn-p 中,我如何返回我的数据集但排除所有空白行,即空白表示所有列中包含 null 或空字符串的行。
【问题讨论】:
-
对于 null 的检查,所有列都应该是字符串类型
ds.Tables.Add(dt);
return ds;
在上面的代码 sn-p 中,我如何返回我的数据集但排除所有空白行,即空白表示所有列中包含 null 或空字符串的行。
【问题讨论】:
您必须事先进行检查,然后返回 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;
【讨论】:
如果有人偶然发现这篇文章,这是我想出的解决方案:
// 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<DataRow>().ToList().FindAll(row => string.IsNullOrEmpty(string.Join("", row.ItemArray))).ForEach(row => { dt.Rows.Remove(row); });
dt.Rows.Cast<DataRow>().Where(w => !w.ItemArray.All(a => a is null || string.IsNullOrWhiteSpace(a as string?? a.ToString())))
这里有帮助函数,其中传递你想要删除所有空列的数据行的表(这里我假设所有字符串都是字符串类型,那么它会起作用) 对于其他类型,您可以检查数据列类型,然后进行相关检查。
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;
}
【讨论】:
您可以尝试使用此方法循环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;
}
}
}
【讨论】: