PDA

View Full Version : تبدیل Collection به DataTable



jaza_sa
دوشنبه 04 شهریور 1387, 20:51 عصر
سلام
چطور میشه یک Collection رو به یک DataTable تبدیل کرد
فرض کنید یک لیستی از مشتریان داریم و میخواهیم محتویات آنرا داخل یک DataTable بریزیم ...
چطور باید اینکار رو انجام داد

List<Customer> cust = new List<Customer>;

majid325
چهارشنبه 24 مهر 1387, 18:39 عصر
من هم همين سوال رو دارم ، كسي تو اين فروم توجه هي به اين سوال ها نميكنه!!

ghayegh
چهارشنبه 24 مهر 1387, 21:13 عصر
سلام
کد زیر را برای ریختن اطلاعات در DataTable و همچنین خواندن اطلاعات از آن برایتان فرستاده ام
:لبخندساده:


DataTable l_DataTable = new DataTable();
l_DataTable.TableName = "ThisIsTableName";
l_DataTable.Columns.Add("firstName");
l_DataTable.Columns.Add("lastName");
l_DataTable.Columns.Add("city");
System.Data.DataRow rowm;
/*Record 1*/
rowm = l_DataTable.NewRow();
rowm["firstName"] = "zahra";
rowm["lastName"] = "alavi";
rowm["city"] = "Tehran";
l_DataTable.Rows.Add(rowm);
/*Record 2*/
rowm = l_DataTable.NewRow();
rowm["firstName"] = "mina";
rowm["lastName"] = "shahabi";
rowm["city"] = "Yazd";
l_DataTable.Rows.Add(rowm);
/*و این هم طریقه ی گرفتن اطلاعات از دیتاتیبل*/
int i = 0;
foreach (DataRow row in l_DataTable.Rows )
{
i = 0;
listBox1.Items.Add(row[i++].ToString() + " " + row[i++].ToString() + " " + row[i++].ToString() + " ");
}



ضمنا از مطلبی که راجع به مسئله ی Cycle در کلاس ها فرستادید ممنونم:تشویق:

majid325
چهارشنبه 24 مهر 1387, 23:19 عصر
خيلي ممنون
حداقلش اينكه يكي يه توجهي كرد ولي منظور اين نبود ، سوال چيز ديگري هست.

SMRAH1
پنج شنبه 25 مهر 1387, 06:49 صبح
به نظر می رسه این کد یک DataTabel می سازه.حالا کافی روی Collection تون یک Enumrator بگذارید (با foreach معمولی).
پس مشکل کجاست؟شاید اگر سئوالتون رو دقیق تر مطرح کنید بشه بهتر جواب داد.

majid325
سه شنبه 30 مهر 1387, 05:58 صبح
فرض كنيد يه كالكشن تو كلاستون داريد و حالا ميخواين اينو بريزين تو يه ديتاسورس كه تو بانك ثبتش كنيد.
مشكل انتقال مقادير از كالكشن به ديتا سورس هست ! شما تو كارهاي بزرگ با foreach اين تبديل رو انجام ميديد؟

naeeme
سه شنبه 30 مهر 1387, 11:03 صبح
فرض كنيد يه كالكشن تو كلاستون داريد و حالا ميخواين اينو بريزين تو يه ديتاسورس كه تو بانك ثبتش كنيد.
مشكل انتقال مقادير از كالكشن به ديتا سورس هست ! شما تو كارهاي بزرگ با foreach اين تبديل رو انجام ميديد؟
دقیقا!
البته باید توجه کرد که collection معمولا حجم بالایی نداره پس یه foreach زحمت زیادی ایجاد نمی کنه. collection با حجم بالا خودش به تنهایی می تونه یه برنامه رو بخوابونه!!

egoldashraf
چهارشنبه 01 آبان 1387, 04:49 صبح
با این متد میتونید تبدیل رو انجام بدید.


public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{
DataTable dtReturn = new DataTable();

// column names
PropertyInfo[] oProps = null;

if (varlist == null) return dtReturn;

foreach (T rec in varlist)
{
// Use reflection to get property names, to create table, Only first time, others will follow

if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;

if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}

dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}

DataRow dr = dtReturn.NewRow();

foreach (PropertyInfo pi in oProps)
{
dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
}

dtReturn.Rows.Add(dr);
}
return dtReturn;
}