【问题标题】:DataTable not binding to GridView after using ImportRow使用 ImportRow 后 DataTable 未绑定到 GridView
【发布时间】:2016-05-31 00:03:16
【问题描述】:

我正在尝试根据与主网格视图 (GridView) 的值差异百分比创建摘要 GridView (GridView1)。它似乎可以很好地创建汇总数据表,但是当我将它绑定到网格视图时,它什么也没做。我不知道为什么?

    DataTable datatable = getDataTable(sqlSelect, sqlFilterBy);
    DataTable summaryTable = new DataTable();
    if (datatable.Rows.Count > 0)
    {
        GridView.DataSource = datatable;
        GridView.DataBind();
        gridView_Container.Visible = true;
        lblTableTitle.Text = "Run Information";
        lblTableTitle.Visible = true;

        IEnumerable<DataRow> runsQuery =
            from run in datatable.AsEnumerable()
            select run;

        IEnumerable<DataRow> overRuns =
            runsQuery.Where(p => p.Field<int>("% Difference") > 0);

        foreach (DataRow row in overRuns)
        {
            summaryTable.ImportRow(row);  
        }

        lblMessage.Text = summaryTable.Rows.Count.ToString();
        GridView1.DataSource = summaryTable;
        GridView1.DataBind();

    }

我知道问题出现在我将行导入新的 summaryTable 的 foreach 循环中。 summaryTable 中的行数计数返回正确的值。所以我确定他们在那里。当我尝试将 GridView1 绑定到原始数​​据表(用于 GridView)中找到的行时,这也会绑定并显示 gridview。所以这两个部分都是独立工作的(我认为),但是正在发生的事情不允许我将 summaryTable 绑定到网格视图?

对不起,如果我的解释不清楚,但我不完全确定出了什么问题。这是我第一次玩动态查询,所以很可能我做了一些明显但错误的事情。

【问题讨论】:

    标签: c# gridview datatable


    【解决方案1】:

    我怀疑这是因为您的目标没有架构。我建议克隆原始的 DataTable 以创建相同的架构(DataColumns 等)。

    summaryTable = runsQuery.Clone(); // copy schema.
    foreach (DataRow row in overRuns)
    {
         summaryTable.ImportRow(row);  
    }
    

    如果您使用的是 .Net 3.5 或更高版本,则可以使用 CopyToDataTable 扩展名。

    DataTable summaryTable = overRuns.CopyToDataTable();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多