将一个集合转换为一个DataTable

   将一个集合转换为一个DataTable
                 suncsea 2006/12/7
在实际工作中,会遇到要求将一个集合如ArrayList转化成一个DataTable的情况,这样充分利用DataView等进行多条件排序等处理。有许多方式可以实现,下面主要介绍一种比较简单的方法:反射方式,希望能给读者一定的参考。
前提:
  1、具有属性的对象。sampleDataModle
  2、一个集合,我们以ArrayList为例arrayList
处理方式:
  采用反射机制。代码如下:
  ///<summary>
        ///说明:将一个ArrayList转化成一个DataView。
        ///</summary>    
        ///<param name="arrayList">一个ArrayList。</param>
        ///<returns>
        ///DataView:转换后的dataview。
        /// null:转换失败。
        ///</returns>
        private DataTable ConvertAArrayListToDataView(ArrayList arrayList)
        {
            DataTable dtTarget = new DataTable ();
            if (arrayList==null || arrayList .Count == 0) 
            {
                return null;
            }

            dtTarget.TableName = arrayList[0].GetType().Name;

            PropertyInfo [] piColumns = arrayList [0].GetType().GetProperties();

            //设置列
            foreach (PropertyInfo piColumn in piColumns)
            {
                dtTarget.Columns.Add(piColumn.Name);
            }

            //插入数据
            for (int rowIndex = 0; rowIndex < arrayList.Count; rowIndex++)
            {
                DataRow drRow = dtTarget.NewRow();

                for (int columnIndex = 0; columnIndex < piColumns.Length; columnIndex++)
                {
                    object tempItem = arrayList[rowIndex];
                    object newRow = tempItem.GetType().InvokeMember(piColumns[columnIndex].Name,
                        BindingFlags.GetProperty, null, tempItem, new object[] { });
                    if (newRow != null)
                    {
                        drRow[columnIndex] = newRow.ToString();
                    }
                }
                dtTarget.Rows.Add(drRow);

            }        

            return dtTarget;
        }
  在这个方法中,我们将DataTable内的所有列的类型设为string,这是个捷径,当然也是它的局限性。但这个方法的基本目的是得到DataTable,从而可像操作数据库表一样结合原来的ArrayList去操作ArrayList内所有的内容,从这个角度上讲,它的目的已经达到了。 <script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值