2016-07-22 21 views
0

Ich habe ein RadGridView-Steuerelement in meinem Formular. Ich binde DataGriView um einen Parameter von einem Suchsteuerelement. Ich benutze diesen Code meine ausgewählten Zeilen in einer Datatable zu speichern und zeigen in einem Bericht:Gefilterte Zeilen von DataGridView in einer DataTable speichern

DataTable table = new DataTable("dt1"); 

     foreach (Telerik.WinControls.UI.GridViewDataColumn column in radGridView1.Columns) 
     { 
      table.Columns.Add(column.Name, typeof(string)); 
     } 
     for (int i = 0; i < radGridView1.Rows.Count; i++) 
     { 
       table.Rows.Add(); 
       for (int j = 0; j < radGridView1.Columns.Count; j++) 
       { 
        table.Rows[i][j] = radGridView1.Rows[i].Cells[j].Value; 
       }     
     } 

     DataSet ds = new DataSet(); 
     ds.Tables.Add(table); 
     StiReport stiReport = new StiReport(); 
     stiReport.Load("Report.mrt"); 
     stiReport.RegData(table); 
     StiOptions.Viewer.Windows.ShowPageDesignButton = false; 
     StiOptions.Viewer.Windows.ShowOpenButton = false; 
     //stiReport.Design(); 
     stiReport.Show(); 

Dieser Code funktioniert, aber wenn ich Filter von RadDataGridView verwenden, um Zeilen für die Auswahl, der obige Code nicht gut funktioniert und alle Zeilen werden angezeigt. Wie kann dieser Code zum Speichern nur gefilterter Zeilen in einer DataTable geändert werden?

Antwort

1

Versuchen Sie, diese Änderung vorzunehmen, und Sie sollten das gewünschte Ergebnis

DataTable table = new DataTable("dt1"); 

     foreach (Telerik.WinControls.UI.GridViewDataColumn column in radGridView1.Columns) 
     { 
      table.Columns.Add(column.Name, typeof(string)); 
     } 
     for (int i = 0; i < radGridView1.Rows.Count; i++) 
     { 
       table.Rows.Add(); 
       for (int j = 0; j < radGridView1.Columns.Count; j++) 
       { 
        table.Rows[i][j] = radGridView1.Rows[i].Cells[j].Value; 
       }     
     } 

     DataSet ds = new DataSet(); 
     ds.Tables.Add(table); 
     var dv = ds.Tables[0].DefaultView; 
     var strExpr = "ItemID = 1"; //Change accordingly 
     dv.RowFilter = strExpr; 
     var newDT = dv.ToTable(); 
     StiReport stiReport = new StiReport(); 
     stiReport.Load("Report.mrt"); 
     stiReport.RegData(newDT); 
     StiOptions.Viewer.Windows.ShowPageDesignButton = false; 
     StiOptions.Viewer.Windows.ShowOpenButton = false; 
     //stiReport.Design(); 
     stiReport.Show(); 

wo strExpr sollte die Filter Ausdruck sein, die Sie verwenden möchten erhalten. Hoffe, das funktioniert für Sie, Prost

+0

Thanks.It funktioniert. Ich verwende "var strExpr = radGridView1.FilterDescriptors.Expression;" anstelle von "var strExpr =" ItemID = 1 ";" und es funktioniert. – manizheh