Monday, April 6, 2009

Convert Object Array to DataTable

using System;
using System.Reflection;
using System.Data;

namespace BusinessLogicLayer
{

/// <summary>
/// Business Logic to Convert Datatable
/// </summary>
public static class ConvertToDatatable
{

#region "Converting ObjectArray to Datatable"

/// <summary>
/// Returns datatable using supplied parameters.
/// </summary>
/// <param name="array">Object array for which data is to be converted into datatable.</param>
/// <returns>Datatable on the basis of supplied parameters.</returns>
public static DataTable ConvertToDataTable(Object[] array)
{

PropertyInfo[] properties = array.GetType().GetElementType().GetProperties();
DataTable dt = CreateDataTable(properties);
if (array.Length != 0)
{
foreach (object o in array)
FillData(properties, dt, o);
}
return dt;
}

/// <summary>
/// Returns datatable using supplied parameters.
/// </summary>
/// <param name="properties">Propertyinfo object for which data is to be converted into columns of datatable.</param>
/// <returns>Datatable on the basis of supplied parameters.</returns>
private static DataTable CreateDataTable(PropertyInfo[] properties)
{
DataTable dt = new DataTable();
DataColumn dc = null;
foreach (PropertyInfo pi in properties)
{
dc = new DataColumn();
dc.ColumnName = pi.Name;
//dc.DataType = pi.PropertyType;
dt.Columns.Add(dc);
}
return dt;
}

/// <summary>
/// Filling record/s to datatable using supplied parameters.
/// </summary>
/// <param name="properties">PropertyInfo Object for which data is to be fill.</param>
/// <param name="dt">Datatable object to fill record/s</param>
/// <param name="o">Object for which data is to be fill.</param>
private static void FillData(PropertyInfo[] properties, DataTable dt, Object o)
{
DataRow dr = dt.NewRow();
foreach (PropertyInfo pi in properties)
{
dr[pi.Name] = pi.GetValue(o, null);
}
dt.Rows.Add(dr);
}
#endregion
}
}

1 comment: