【问题标题】:source cantain no data row while using take asp.net使用 take asp.net 时源不包含数据行
【发布时间】:2017-06-06 06:54:42
【问题描述】:

目前当记录为零时,我收到错误 来源 不能包含任何数据行来管理我已经检查过 count>0 但仍然 我知道如何解决这个问题。

dynamic dt = ds.Tables(0);
int totalrowCount = dt.Rows.Count;


//dt.Rows.Count 
//dt.Select().Take(100)
// dt.Rows.Cast(Of System.Data.DataRow)().Take(100)
DataTable dt1 = default(DataTable);
if (totalrowCount > 0) {
    dt1 = dt.AsEnumerable().Take(100).CopyToDataTable();
} else {
    dt1 = dt.AsEnumerable().CopyToDataTable();
}

【问题讨论】:

  • 不清楚您希望检查做什么 - 如果没有行,那么 dt.AsEnumerable().Take(100) 将返回与 dt.AsEnumerable() 相同的序列。我们不知道您在哪里遇到错误并没有帮助。如果它在后面的一段代码中需要非空的DataTable,那么你真的需要更仔细地考虑当没有任何行时你想要发生的事情。跨度>
  • 在其他部分我得到了错误。
  • @Zbidi 我在其他部分出现错误
  • 对,CopyToDataTable 在没有行时记录为失败。因此,在这种情况下,您可能需要找到一种不同的方法来创建 DataTable - 也许只使用 dt1 = dt;
  • 好的,我已经使用了 dt.clone 并且它正在工作!感谢@JonSkeet 的帮助

标签: c# asp.net gridview take


【解决方案1】:

由于documentedCopyToDataTable() 不能在空的行序列上调用 - 大概是因为没有要包含的架构信息。相反,如果您知道原始表是空的,并且想要一个具有相同架构的新表,只需克隆它。所以你有:

DataTable dt = ds.Tables(0);
DataTable newTable = dt.Rows.Count > 0
    ? dt.AsEnumerable().Take(100).CopyToDataTable() 
    : dt.Clone();

【讨论】:

    【解决方案2】:

    使用以下检查行数;

    if (ds.Tables.Count > 0 && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
    

    但是当行数

    dt1 = dt.AsEnumerable().CopyToDataTable(); 
    

    这行没有意义。 您需要获取空行吗?

    【讨论】:

    • 如果没有表,代码将在其他地方失败。 OP 正在成功检查是否有任何行。
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2011-05-28
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多