PDA

View Full Version : سوال: انتقال داده از IEnumerable به DataTable



davidrobert
یک شنبه 19 اسفند 1397, 17:46 عصر
سلام و خسته نباشید دوستان بنده میخوام اطلاعات از یک کلاس دیگه دریافت کنم که به این صورت اطلاعات را از کلاس Helper ام میگیرم که کل دستورات دیتابیس بنده توسط Helper مدیریت میشه.

public IEnumerable<StateSite.GetState> GetState()
{
List<StateSite.GetState> stateSites = new List<StateSite.GetState>();
SqlCommand commnd = new SqlCommand();
var dicData = new Dictionary<string, string>();
dicData[at + StatementType] = P_StateSite.GetState;
stateSites = hlp.DataReaderMapToList<StateSite.GetState>(commnd, P_StateSite.Pro_StateSite, dicData);
return stateSites;
}

این دستور بنده در کلاس هستش که برای نمایش اطلاعات ازش استفاده میکنم.
و برای دیتاگرید ویو دستور به این صورت صدا میزنم و اطلاعات میخونه و نمایش میده.

dgv.DataSource = stateSite.CheckDate().ToList();

ولی مشکل سر این دارم برای نمایش در DataTable چیکار باید انجام بیدم چون به این صورت

stateSite.CheckDate().ToList();

بخوام اطلاعات بریزم داخل DataTable قبول نمیکنه و از روش ADO هم استفاده میکنم.

davidrobert
یک شنبه 19 اسفند 1397, 20:26 عصر
سلام خوب هستید دوستان عزیز استاد عزیزم پیغام بنده دید و خصوصی تلگرام جواب داد و این هم پاسخ این سوال.
یه کلاس خارجی به صورت Public درست میکنید و این دستور درونش قرار میدید.

public DataTable ToDataTable<T>(IEnumerable<T> items)
{
// Create the result table, and gather all properties of a T
DataTable table = new DataTable(typeof(T).Name);
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

// Add the properties as columns to the datatable
foreach (var prop in props)
{
Type propType = prop.PropertyType;

// Is it a nullable type? Get the underlying type
if (propType.IsGenericType && propType.GetGenericTypeDefinition().Equals(typeof( Nullable<>)))
propType = new NullableConverter(propType).UnderlyingType;

table.Columns.Add(prop.Name, propType);
}

// Add the property values per T as rows to the datatable
foreach (var item in items)
{
var values = new object[props.Length];
for (var i = 0; i < props.Length; i++)
values[i] = props[i].GetValue(item, null);

table.Rows.Add(values);
}

return table;
}

و نحوه صدا زدن دستور

DataTable dt =ToDataTable(stateSite.GetState());

به این صورت هروقت نیاز دارم از IEnumerable میریزم اطلاعات داخل DataTable

رامین مرادی
دوشنبه 20 اسفند 1397, 09:20 صبح
سلام وقت بخیر. میتونید تلگرامتون رو بگید چندتا سوال و راهنمایی میخواستم.