تذکر :
برای درک صحیح روش انجام گرفته در متدهای این مقاله، آشنایی
مقدماتی با مقوله Reflection الزامی می باشد.
برای تبدیل لیست مورد نظر به یک DataTable ما از یک متد توسعه
گر (Extension Method) استفاده نموده ایم. و این متد در داخل خود متد دیگری را
فراخوانی می کند.
به قطعه کد زیر توجه فرمایید.
public static
DataTable ConvertToDatatable<T>(this
IList<T> GenericList,
IList<T> list)
{
DataTable table =
new DataTable();
if (list.Count > 0)
{
// بازیابی خصوصیات لیست
PropertyInfo[]
properties = list[0].GetType().GetProperties();
List<string>
columns = new
List<string>();
// ایجاد ستون های جدول با استفاده از
نام و نوع خصوصیات لیست
foreach (PropertyInfo
pi in properties)
{
table.Columns.Add(pi.Name);
columns.Add(pi.Name);
}
foreach
(T item in list)
{
// به ازای تمامی آیتم های موجود در
لیست این تابع فراخوانی شده
//و با هر بار فراخوانی آرایه ای از
مقادیری که باید به جدول اضافه شوند، برگردانده می شود
object[] cells =
GetValues(columns, item);
table.Rows.Add(cells);
}
}
return table;
}
///
<summary>
/// www.30sharp.com
///
</summary>
/// <param
name="listOfColumnNames">این لسیت شامل نام
ستون های جدول و یا به عبارت دیگر نام خصوصیات لیست می باشد</param>
/// <param
name="instance">آیتمی که قرار است مقادیر
خصوصیات آن در در یک رکورد جدول ذخیره کنیم</param>
///
<returns>آرایه ای که شامل مقادیر خصوصیات
آیتم ارسال شده به متد می باشد</returns>
private static
object[] GetValues(IList<string>
listOfColumnNames, object
instance)
{
object[]
arrColumnValues = new
object[listOfColumnNames.Count];
for (int
n = 0; n < arrColumnValues.Length; n++)
{
// بازیابی خصوصیت مر آیتم بر اساس
نام خصوصیت
PropertyInfo pi
= instance.GetType().GetProperty(listOfColumnNames[0]);
// باز یابی مقدار خصوصیت
object value =
pi.GetValue(instance, null);
// ذخیره مقدار بازیابی شده در آرایه
arrColumnValues[n] = value;
}
return arrColumnValues;
}
|
قطعه
کد کاملا واضح می باشد.
متد GetValues لیستی از نام ستون های جدول و
آیتمی از لیست که قرار است مقادیر آن بازیابی شود را دریافت می کند و مقادیری که
باید در هر ستون ذخیره شوند را به صورت آرایه ای از آبجکت ها، برمی گرداند.
نحوه استفاده از قطعه کد بالا به شکل زیر می باشد. فرض می کنیم
کلاسی به نام User داریم که مشخصات کاربران شامل نام و نام خانوادگی و غیره را
نگهداری می کند.
public
class User
{
public
string FName { get;
set; }
public
string LName { get;
set; }
}
// نحوه استفاده
List<User>
lst = new
List<User>()
;
// پر کردن لیست
//...
//...
DataTable tb= lst.ConvertToDatatable(lst);
|
مثال انجام شده در این مقاله از طریق لینک بالای صفحه قابل دریافت می باشد.