Bluefish@CsdnBlog

十几岁的少年天才到处都有,三十多岁的优秀设计师凤毛麟角,掌握一种力量是容易的,学会恰当地使用这种力量却难得多,这就是聪明与智慧之间的差别.

俞兆平ID:dzfb
75983次访问,排名1157(-1)好友1人,关注者3
很强的逻辑思维能力、自学能力。
很想在有生之年为中国自己的软件或互联网做些贡献。
dzfb的文章
原创 81 篇
翻译 0 篇
转载 13 篇
评论 191 篇
俞兆平的公告
I must study hard
我的个人简历

我的联系方式:




我的开源学习作品:

[C#]三层架构演示
[JAVA]OnlineTest DEMO

我的活动安排: 订阅:
最近评论
helingling_67:讲的非常正确。支持
psnccs:Wow gold
bluefish:应该不算是一个级别的,级别这个东西在互联网时代拿用户数来说是最直接和权威的。数据库市场上,两者能算是一个级别,而两家公司已经不在一个级别上了。
all_can:有一点需要说明,IBM和SUN的主营业务是卖硬件。sun的solaris已经开源了,说明sun的软件业务已经不赚钱了。请大家站在商业的角度上考虑考虑吧~微软的目前能看在眼里的对手说实话只有oracle一个。大家说说这两个公司是一个级别的吗?
dzfb:这是桌面应用程序,不是WEB的...
文章分类
收藏
    相册
    IdeaGames
    大学时光
    Blog
    Bluefish@BaiduBlog(RSS)
    mc1035
    shoegazer
    zhengyun_ustc
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 利用.NET中的反射机制实现IList到DataTable的转换收藏

    新一篇: 毕业了,做个纪念

    本文的意义并不仅仅是为了说明如何将IList转换为DataTable,而是给出一个利用反射来实现对各种数据结构(集合类)相互转换的通用方法的编写思路。

    相信很多使用过Nhibernate的朋友都知道,通过NH访问数据库,数据都是以ILIST形式返回的,这就为我们在.NET中使用传统的数据绑定造成了不便。由于NH返回的ILIST所装载的对象往往都是不同的,我们会为每个返回的LIST单独编写转换方法,而利用反射机制却可以做成通用的转换方法。 

    代码如下(C#):

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Collections;
    using System.Reflection;

    namespace KycBaseModule
    {
        
    public class KycFunction
        
    {
            
    public KycFunction() { }
            
    /// <summary>
            
    /// 实现对IList到DataSet的转换
            
    /// </summary>
            
    /// <param name="ResList">待转换的IList</param>
            
    /// <returns>转换后的DataSet</returns>

            public static DataSet ListToDataSet(IList ResList)
            
    {
                DataSet RDS
    =new DataSet();
                DataTable TempDT 
    = new DataTable();

                
    //此处遍历IList的结构并建立同样的DataTable
                System.Reflection.PropertyInfo[] p = ResList[0].GetType().GetProperties();
                
    foreach (System.Reflection.PropertyInfo pi in p)
                
    {
                    TempDT.Columns.Add(pi.Name,System.Type.GetType(pi.PropertyType.ToString()));
                }


                
    for (int i = 0; i < ResList.Count; i++)
                
    {
                    IList TempList 
    = new ArrayList();
                    
    //将IList中的一条记录写入ArrayList
                    foreach (System.Reflection.PropertyInfo pi in p)
                    
    {
                        
    object oo = pi.GetValue(ResList[i], null);
                        TempList.Add(oo);
                    }

                    
                    
    object[] itm=new object[p.Length];
                    
    //遍历ArrayList向object[]里放数据
                    for (int j = 0; j < TempList.Count; j++)
                    
    {
                        itm.SetValue(TempList[j], j);
                    }

                    
    //将object[]的内容放入DataTable
                        TempDT.LoadDataRow(itm, true);
                }

                
    //将DateTable放入DataSet
                RDS.Tables.Add(TempDT);
                
    //返回DataSet
                return RDS;
            }

        }

    }

    由上面的代码可以看出,实现的过程非常简单。首先利用反射,将传入方法的IList中的对象所包含的属性进行获取,然后根据获取的属性建立DataTable的Columns,然后利用循环遍历整个IList,将每个结点对象所包含的内容依次复制到DataTable。由于该代码取自真实的项目模块,所以保留了原有的命名空间和将DataTable放入Dataset的几行。

    希望本文能够为需要进行数据转换的朋友提供些灵感。

    发表于 @ 2007年05月31日 18:34:00|评论(loading...)|编辑

    旧一篇: 谷歌的本土化正改变着我对google的看法

    评论

    #limenglm 发表于2007-06-04 12:02:24  IP: 58.49.83.*
    能不能说的更加的详细拉
    我也事才学.的 谢谢拉
    #limenglm 发表于2007-06-04 12:02:41  IP: 58.49.83.*
    不过还事要谢谢你拉
    #dzfb 发表于2007-06-04 21:12:31  IP: 219.239.110.*
    哪里不明白可以发邮件到我的GMAIL信箱.
    #dzfb 发表于2007-06-20 15:56:12  IP: 219.239.110.*
    正在考虑改良这个方法,为其增加范型。以提高转换效率和保证类型安全。
    #zs 发表于2007-09-03 12:01:39  IP: 219.137.160.*
    不太明白的是又要写入ArrayList,然后又写入object,再Load到Table中?
    #dzfb 发表于2007-09-03 21:58:57  IP: 219.239.110.*
    呵呵,ArrayList是放一行记录,table...就是一table啦~不能直接压arraylist就拿对象数组转一下.懒么,为了用arraylist的add...
    #dzfb 发表于2007-09-03 22:02:15  IP: 219.239.110.*
    你可以试着改改这段代码,说实话,我看那几行循环不爽已经很久了
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 俞兆平