Conversion of List to DataTable and ViceVersa

Last post 12-10-2009 11:43 AM by RomuloCRJ. 3 replies.

Sort Posts:

  • Conversion of List to DataTable and ViceVersa

    06-08-2009, 7:38 AM

    hi ,

               Iam having a requirement where I wil get datatable or Dataview from the DataAccessLayer I need to convert them into GanaricList of entites and ViceVersa from GenericList to Datatable or DataView.

                 I tried it but I cant. Can anybody help me out.

  • Re: Conversion of List to DataTable and ViceVersa

    06-08-2009, 9:26 AM

    what have you tried?

    If you have the structure of the entity, you should be able to loop thru the columns of the datatable and match them to the properties of entity and vice-versa.  Post some code and we can help.

    Please mark as answer if you find helpful.

    Ustes G.
  • Re: Conversion of List to DataTable and ViceVersa

    06-09-2009, 12:26 AM

    Public Function GetDataTable(ByVal MyObjectList As Object, ByVal objectProperties As Object) As DataTable


    Dim MyTable As New DataTable


    'create a column for each property in the class
    For Each propertyItem As PropertyInfo In objectProperties
    MyTable.Columns.Add(
    New DataColumn(propertyItem.Name))
    Next


    For Each oObject As Object In MyObjectList
    Dim row As DataRow = MyTable.NewRow()
    For Each propertyItem As PropertyInfo In objectProperties
    row(propertyItem.Name) = propertyItem.GetValue(oObject,
    Nothing)
    Next

    MyTable.Rows.Add(row)
    Next
    GetDataTable = MyTable
    End Function

    I tried this one for converting GenericList to DataTable Iam passing PropertiesInfo also as a parameter but I want to pass only GenericLsit single parameter.

    and Iam not geting for converting DataTable to GenricList please help me.

  • Re: Conversion of List to DataTable and ViceVersa

    12-10-2009, 11:43 AM
    • Member
      2 point Member
    • RomuloCRJ
    • Member since 12-10-2009, 11:41 AM
    • Posts 1

    From

    http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/29accbbd-5640-477c-b367-44f888bafde3/?prof=required&ppud=4


    using System;
    using System.Web;
    using System.Data;
    using System.Linq;
    using System.Reflection;
    using System.Collections;
    using System.Collections.Generic;


        public static class MapUtil
        {
            public static List<T> toList<T>(this DataTable table)
            {
                List<T> list = new List<T>();

                    T item ;
                    Type listItemType = typeof(T);

                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        item = (T) Activator.CreateInstance(listItemType);
                        mapRow(item, table, listItemType, i);
                        list.Add(item);
                    }
                }

                return list;
            }

            private static void mapRow(object vOb, System.Data.DataTable table, Type type, int row)
            {
                for (int col = 0; col < table.Columns.Count; col++)
                {
                    var columnName = table.Columns[col].ColumnName;

                        var prop = type.GetProperty(columnName);
                        object data = getData(prop, table.Rows[row][col]);
                        prop.SetValue(vOb, data, null);

                }
            }

            private static object getData(PropertyInfo prop, object value)
            {
                if (prop.PropertyType.Name.Equals("Int32"))
                    return Convert.ToInt32(value);

                if (prop.PropertyType.Name.Equals("Double"))
                    return Convert.ToDouble(value);

                if (prop.PropertyType.Name.Equals("DateTime"))
                    return Convert.ToDateTime(value);

                return Convert.ToString(value).Trim();
            }



            public static DataTable toDataTable(this IList list)
            {

                DataTable dt = null;
                Type listType = list.GetType();

                    if (listType.IsGenericType)
                    {
                        Type elementType = listType.GetGenericArguments()[0];
                        dt = new DataTable(elementType.Name + "List");
                        MemberInfo[] miArray = elementType.GetMembers(
                            BindingFlags.Public | BindingFlags.Instance);
                        foreach (MemberInfo mi in miArray)
                        {
                            if (mi.MemberType == MemberTypes.Property)
                            {
                                PropertyInfo pi = mi as PropertyInfo;
                                dt.Columns.Add(pi.Name, pi.PropertyType);
                            }
                            else if (mi.MemberType == MemberTypes.Field)
                            {
                                FieldInfo fi = mi as FieldInfo;
                                dt.Columns.Add(fi.Name, fi.FieldType);
                            }
                        }
                        IList il = list;
                        foreach (object record in il)
                        {
                            int i = 0;
                            object[] fieldValues = new object[dt.Columns.Count];
                            foreach (DataColumn c in dt.Columns)
                            {
                                MemberInfo mi = elementType.GetMember(c.ColumnName)[0];
                                if (mi.MemberType == MemberTypes.Property)
                                {
                                    PropertyInfo pi = mi as PropertyInfo;
                                    fieldValues[i] = pi.GetValue(record, null);
                                }
                                else if (mi.MemberType == MemberTypes.Field)
                                {
                                    FieldInfo fi = mi as FieldInfo;
                                    fieldValues[i] = fi.GetValue(record);
                                }
                                i++;
                            }
                            dt.Rows.Add(fieldValues);
                        }
                    }
                return dt;
            }
        }



    _______________________


    use:

    DataTable dt;

    (...)

    var list = dt.toList<MyClass>();

    var newDt = list.toDataTable();

Page 1 of 1 (4 items)