Bir DataRow
diziyi DataTable
... Bunu yapmanın en basit yolu nedir?
Bir DataRow
diziyi DataTable
... Bunu yapmanın en basit yolu nedir?
Yanıtlar:
Neden DataRow dizinizi yinelemiyorsunuz ve (gerekirse DataRow'un bir kopyasını almak için DataRow.ImportRow kullanarak) aşağıdakilere benzer bir şey eklemiyorsunuz:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
DataTable'ınızın DataRow dizinizdeki DataRows ile aynı şemaya sahip olduğundan emin olun.
rowArray.CopyToDataTable();
tablo şemasını koruduğu ve onu yeni tablo nesnesiyle değiştirmediği için tercih ederim !
.Net Framework 3.5+ için
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Ancak dizide satır yoksa, Kaynak DataRows içermiyor gibi hatalara neden olabilir . Bu nedenle, bu yöntemi kullanmaya karar verirseniz CopyToDataTable()
, diziyi veri satırına sahip olup olmadığını anlamak için kontrol etmelisiniz.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
MSDN'de mevcut referans: DataTableExtensions.CopyToDataTable Method (IEnumerable)
copyToDataTable()
? .Net 2.0'da bulamadım
copyToDataTable()
yöntemin iken, seçilen satırların sütun mükemmel bir kopyasını oluşturur datatable.ImportRow(row)
yöntem doesnt
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
Input array is longer than the number of columns in this table.
". With-Clone Version Error: " Unable to cast object of type 'System.Data.DataRow' to type 'System.IConvertible'.Couldn't store <System.Data.DataRow> in StoreOrder Column. Expected type is Int64.
" Not: StoreOrder
tablo şemasındaki ilk sütundur. Görünüşe göre tüm verileri ilk sütuna sıkıştırmaya çalışıyor
Başka bir yol da DataView kullanmaktır
// Create a DataTable
DataTable table = new DataTable()
...
// Filter and Sort expressions
string expression = "[Birth Year] >= 1983";
string sortOrder = "[Birth Year] ASC";
// Create a DataView using the table as its source and the filter and sort expressions
DataView dv = new DataView(table, expression, sortOrder, DataViewRowState.CurrentRows);
// Convert the DataView to a DataTable
DataTable new_table = dv.ToTable("NewTableName");
Basit yol:
// dtData is DataTable that contain data
DataTable dt = dtData.Select("Condition=1").CopyToDataTable();
// or existing typed DataTable dt
dt.Merge(dtData.Select("Condition=1").CopyToDataTable());
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
DataTable Assetdaterow =
(
from s in dtResourceTable.AsEnumerable()
where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
select s
).CopyToDataTable();
.Net 3.5+ DataTableExtensions ekledi, DataTableExtensions.CopyToDataTable Yöntemini kullanın
Datarow dizisi için sadece .CopyToDataTable () kullanın ve datatable döndürecektir.
Tek datarow kullanımı için
new DataRow[] { myDataRow }.CopyToDataTable()
VB.NET'te herkesin buna ihtiyacı olması durumunda:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Önce Veri tablosunun yapısını klonlamanız, ardından for döngüsünü kullanarak satırları içe aktarmanız gerekir.
DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
DataTable dataTable = new DataTable();
dataTable = OldDataTable.Tables[0].Clone();
foreach(DataRow dr in RowData.Tables[0].Rows)
{
DataRow AddNewRow = dataTable.AddNewRow();
AddNewRow.ItemArray = dr.ItemArray;
dataTable.Rows.Add(AddNewRow);
}
DataTable dataTable = new DataTable(); dataTable.ImportRow(dataRow); MyControl.DataSource = dataTable;