Der Hauptverwendungszweck der CopyToDataTable-Methode ist nicht die Datenbindung sondern, die Daten in ein anderes DataTable-Objekt zu transferieren. Die drei Überladungen der CopyToDataTable-Methode sind wie folgt beschrieben:
Die erste Überladung gibt ein DataTable-Objekt zurück, in dem das Quelle-Objekt in ein DataTable-Objekt umgewandelt wird.
CopyToDataTable<T>(this System.Collections.Generic.IEnumerable<T>)
CopyToDataTable<T>(this System.Collections.Generic.IEnumerable<T>,
System.Data.DataTable,
System.Data.LoadOption)
CopyToDataTable<T>(this System.Collections.Generic.IEnumerable<T>,
System.Data.DataTable,
System.Data.LoadOption,
System.Data.FillErrorEventHandler)
Im folgenden Beispiel werden die Daten mithilfe eines SqlDataAdapter-Objektes aus der Datenbank ermittelt und in ein DataSet gefüllt. Eine einfache LINQ-Abfrage selektiert die Daten und das Resultat wird in die Variable qry zurückgegeben. Das Resultat wird mithilfe der CopyToDataTable-Methode in ein DataTable-Objekt konvertiert und an die DataSource-Eigenschaft eines DataGridView-Controls zugewiesen. Mit dieser Zuweisung werden die Daten automatisch im DataGridView-Control dargestellt.
private void btnCopyToDataTable_Click(object sender, EventArgs e){
string selectSql = @"SELECT [Person].[CountryRegion].[CountryRegionCode],
[Person].[CountryRegion].[Name],
[Person].[CountryRegion].[ModifiedDate]
FROM [Person].[CountryRegion]";
SqlConnection sqlCon = new SqlConnection(@"Data Source=.;
Initial Catalog=AdventureWorks;
Integrated Security=True");
SqlDataAdapter sqlDa = new SqlDataAdapter();
sqlDa.SelectCommand = new SqlCommand(selectSql, sqlCon);
DataSet adventureWorksDS = new DataSet("AdventureWorks");
sqlDa.Fill(adventureWorksDS, "CountryRegion");
var qry = from cr
in adventureWorksDS.Tables["CountryRegion"].AsEnumerable()
select cr;
this.dgvDatabindCopyToDataTable.DataSource = qry.CopyToDataTable();
this.dgvDatabindCopyToDataTableChanges.DataSource = qry.CopyToDataTable();
}
Die Änderungen können über einen Umweg, wie im folgenden Beispielcode, mit Hilfe der GetChanges-Methode ermittelt werden.
private void btnCopyToDataTableChanges_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)this.dgvDatabindCopyToDataTable.DataSource;
this.dgvDatabindCopyToDataTableChanges.DataSource = dt.GetChanges();
}
No comments:
Post a Comment