2016-05-31 8 views
0

Ich versuche, eine Zusammenfassung GridView (GridView1) zu erstellen, die auf dem% Unterschied in Werten von der Haupt-Gridview (GridView) basiert. Es sieht so aus, als würde die Übersichtsdatentabelle in Ordnung sein, aber wenn ich sie an die Rasteransicht binde, tut sie nichts. Ich bin mir nicht sicher warum?DataTable, das nach Verwendung von ImportRow nicht an GridView bindet

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(); 

    } 

Ich weiß, dass das Problem in der foreach-Schleife tritt auf, wenn ich die Zeile in die neue summaryTable importieren. Die Anzahl der Zeilen in der Zusammenfassungstabelle gibt den korrekten Wert zurück. Ich bin mir sicher, dass sie da sind. Wenn ich versuche, das GridView1 an Zeilen zu binden, die in der ursprünglichen Datentabelle (für GridView) gefunden werden, bindet dies und zeigt auch die Gridview an. So arbeiten beide Teile unabhängig voneinander (denke ich), aber etwas passiert, was mir nicht erlaubt, die summaryTable an die Rasteransicht zu binden?

Entschuldigung, wenn meine Erklärung nicht klar ist, aber ich bin mir nicht ganz sicher, was falsch ist. Dies ist das erste Mal, dass ich mit dynamischen Abfragen spiele, also ist es sehr wahrscheinlich, dass ich etwas Offensichtliches gemacht habe, aber falsch.

Antwort

1

Ich vermute, es ist, weil Ihr Ziel kein Schema hat. Ich schlage vor, das Original DataTable zu klonen, um das gleiche Schema (DataColumns etc) zu erstellen.

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

, wenn Sie mit .Net 3.5 oder größer ist, könnten Sie CopyToDataTable Erweiterung verwenden.

DataTable summaryTable = overRuns.CopyToDataTable(); 
+0

Sie vermuteten richtig danke! – Danrex

Verwandte Themen