• 【代码保留】IList转DataTable


            #region 数据集互操作

            
    /// <summary>
            
    /// 将集合类转换成DataTable
            
    /// </summary>
            
    /// <param name="list">集合</param>
            
    /// <returns></returns>
            public static DataTable ToDataTable(IList list)
            {
                DataTable result 
    = new DataTable();
                
    if (list.Count > 0)
                {
                    PropertyInfo[] propertys 
    = list[0].GetType().GetProperties();
                    
    foreach (PropertyInfo pi in propertys)
                    {
                        result.Columns.Add(pi.Name, pi.PropertyType);
                    }

                    
    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList 
    = new ArrayList();
                        
    foreach (PropertyInfo pi in propertys)
                        {
                            
    object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        
    object[] array = tempList.ToArray();
                        result.LoadDataRow(array, 
    true);
                    }
                }
                
    return result;
            }

            
    /// <summary>
            
    /// 将泛型集合类转换成DataTable
            
    /// </summary>
            
    /// <typeparam name="T">集合项类型</typeparam>
            
    /// <param name="list">集合</param>
            
    /// <returns>数据集(表)</returns>
            public static DataTable ToDataTable<T>(IList<T> list)
            {
                
    return  ConvertX.ToDataTable<T>(list, null);
            }

            
    /// <summary>
            
    /// 将泛型集合类转换成DataTable
            
    /// </summary>
            
    /// <typeparam name="T">集合项类型</typeparam>
            
    /// <param name="list">集合</param>
            
    /// <param name="propertyName">需要返回的列的列名</param>
            
    /// <returns>数据集(表)</returns>
            public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
            {
                List
    <string> propertyNameList = new List<string>();
                
    if (propertyName != null)
                    propertyNameList.AddRange(propertyName);

                DataTable result 
    = new DataTable();
                
    if (list.Count > 0)
                {
                    PropertyInfo[] propertys 
    = list[0].GetType().GetProperties();
                    
    foreach (PropertyInfo pi in propertys)
                    {
                        
    if (propertyNameList.Count == 0)
                        {
                            result.Columns.Add(pi.Name, pi.PropertyType);
                        }
                        
    else 
                        {
                            
    if (propertyNameList.Contains(pi.Name))
                                result.Columns.Add(pi.Name, pi.PropertyType);
                        }
                    }

                    
    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList 
    = new ArrayList();
                        
    foreach (PropertyInfo pi in propertys)
                        {
                            
    if (propertyNameList.Count == 0)
                            {
                                
    object obj = pi.GetValue(list[i], null);
                                tempList.Add(obj);
                            }
                            
    else
                            {
                                
    if (propertyNameList.Contains(pi.Name))
                                {
                                    
    object obj = pi.GetValue(list[i], null);
                                    tempList.Add(obj);
                                }
                            }
                        }
                        
    object[] array = tempList.ToArray();
                        result.LoadDataRow(array, 
    true);
                    }
                }
                
    return result;
            }

            
    #endregion
        }

        
    public class ConvertXToDataTableTester : ITest
        {
            
    #region ITest 成员

            
    public string Name
            {
                
    get { return new ConvertXToDataTableTester().GetType().Name; }
            }

            
    public void StartRuntime()
            {
                
    //Test1(ToDataTable<>):boundary
                CollectionBase<Item> items1 = new CollectionBase<Item>();
                items1.Add(
    new Item("item1_1"1));
                items1.Add(
    new Item("item1_2""null"));
                items1.Add(
    new Item("item1_3"3));

                DataTable dt 
    = ConvertX.ToDataTable<Item>(items1);

                
    foreach (DataRow dr in dt.Rows)
                {
                    Console.WriteLine(
    "{0},{1}", dr["text"].ToString(), dr[1].ToString());
                }

                
    //Test2(ToDataTable):
                ArrayList items2 = new ArrayList();
                items2.Add(
    new Item("item2_1"3));
                items2.Add(
    new Item("item2_2"4));
                items2.Add(
    new Item("item2_3"5));

                DataTable dt2 
    = ConvertX.ToDataTable(items2);

                
    foreach (DataRow dr in dt2.Rows)
                {
                    Console.WriteLine(
    "{0},{1}", dr["text"].ToString(), dr[1].ToString());
                }

                
    //Test3(ToDataTable<>):
                IList<Item> items3 = new CollectionBase<Item>();
                items3.Add(
    new Item("item3_1"3));
                items3.Add(
    new Item("item3_2"4));
                items3.Add(
    new Item("item3_3"5));

                DataTable dt3 
    = ConvertX.ToDataTable<Item>(items3, "Text");

                
    foreach (DataRow dr in dt3.Rows)
                {
                    
    //Console.WriteLine("{0},{1}", dr["text"].ToString(), dr[1].ToString());
                    Console.WriteLine("{0}", dr["text"].ToString());
                }

                
    //Test4(ToDataTable<>):Error with error column name
                try
                {
                    
    foreach (DataRow dr in dt.Rows)
                    {
                        Console.WriteLine(dr[
    "errorName"].ToString());
                    }
                }
                
    catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            
    #endregion
        }

        
    public class Item
        {
            
    public Item(string text, object value)
            {
                
    this.text = text;
                
    this.value = value;
            }
            
    private string text;
            
    public string Text
            {
                
    get
                {
                    
    return this.text;
                }
                
    set
                {
                    
    this.text = value;
                }
            }

            
    private object value;
            
    public object Value
            {
                
    get
                {
                    
    return this.value;
                }
                
    set
                {
                    
    this.value = value;
                }
            }
        }

        public interface ITest
        
    {
            
    string Name get; }
            
    void StartRuntime();
        }

    using System;
    using System.Collections.Generic;
    using System.Text;
    using yd.Base;
    using yd.Base.Collections.Generic;
    using yd.Util;

    namespace ConsoleApplicationTester
    {
        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                
    bool debugging = false;

                CollectionBase
    <ITest> testers = new CollectionBase<ITest>();
                
    //testers.Add(new QuarterTester());
                
    //testers.Add(new ConvertXToDataTableTester());

                
    foreach (ITest tester in testers)
                
    {
                    
    if (debugging == false)
                    
    {
                        
    try
                        
    {
                            tester.StartRuntime();
                            Console.WriteLine(
    "___________________________________");
                            Console.WriteLine(tester.Name 
    + " succeed!");
                        }

                        
    catch (Exception ex)
                        
    {
                            Console.WriteLine(tester.Name 
    + " with errors!");
                            Console.WriteLine(
    "____________The error is under the line!__________");
                            Console.WriteLine(ex.Message);
                            Console.WriteLine(
    "!!!!!!!!!!!!!!!!!!!!@@@@@@@!!!!!!!!!!!!!!!!!!!!");
                        }

                    }

                    
    else
                    
    {
                        tester.StartRuntime();
                        Console.WriteLine(
    "___________________________________");
                        Console.WriteLine(tester.Name 
    + " succeed!");
                    }

                }

            }

        }

    }


    CollectionBase<T>:泛型集合类型,赋予集合业务意义,增强集合的抽象使用
  • 相关阅读:
    Git 基础
    SharePoint 2013 对象模型操作"网站设置"菜单
    SharePoint 2013 隐藏部分Ribbon菜单
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 设置自定义布局页
    SharePoint 2013 "通知我"功能简介
    SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
    SharePoint 禁用本地回环的两个方法
  • 原文地址:https://www.cnblogs.com/volnet/p/930439.html
Copyright © 2020-2023  润新知