使用ImportRow

时间:2016-05-31 00:03:17

标签: c# gridview datatable

我正在尝试根据主网格视图(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();

    }

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

DataTable summaryTable = overRuns.CopyToDataTable();