大家好:   下面是我利用的一个把IList 转化为 DataSet 的方法.(在V1.1下).
   代码:       /// <summary>
/// 把IList转换为DataSet
/// </summary>
/// <param name="list">IList</param>
/// <param name="type">Type类型</param>
/// <returns>返回DataSet类型</returns>
public DataSet ConvertToDataSet(IList list,System.Type type)
{
if (list == null || list.Count <= 0)
{
return null;
}            DataSet ds = new DataSet();
DataTable dt = ds.Tables.Add(type.Name);
            
System.Reflection.PropertyInfo[] myPropertyInfo = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (System.Reflection.PropertyInfo pi in myPropertyInfo)
{
dt.Columns.Add(pi.Name, System.Type.GetType(pi.PropertyType.ToString()));
} foreach (object obj in list)
{
DataRow dr = dt.NewRow(); foreach (System.Reflection.PropertyInfo pi in myPropertyInfo)
{
pi.SetValue(obj,2,null);
dr[pi.Name]=pi.GetValue(obj,null);
} dt.Rows.Add(dr);
} return ds;
}
 
     最最最令我郁闷的是: 执行到:dr[pi.Name]=pi.GetValue(obj,null); 总是报告:
 
    "对象与目标类型不匹配。" 错误在: dr[pi.Name]=pi.GetValue(obj,null);      请大家帮助啊!!!!     谢谢!!!     高分相送!!谢谢,谢谢     小弟MSN: [email protected] 
     着急!!

解决方案 »

  1.   

    不好意思,上面的    pi.SetValue(obj,2,null);
     
     这行代码应该去掉,它是我找错误用的,不好意思! 请高手指点
      

  2.   

    type 传来的是ilist子项的类型么???
      

  3.   

    你最好查看一下每一列的数据类型是什么
    foreach (System.Reflection.PropertyInfo pi in myPropertyInfo)
    {
    dt.Columns.Add(pi.Name, System.Type.GetType(pi.PropertyType.ToString()));
    }
      

  4.   

    to hdt(倦怠):      是的,是的!!      请指点!
          请高手指点!!!
          谢谢大家!!!!!!!!!!!!!!!!!!!!!!!!1
      

  5.   

    dr[pi.Name]=pi.GetValue(obj,null);
    改为-〉
    object o =  pi.GetValue(obj,null);
    看看o有没值
      

  6.   

    再發個完整的測試給你看看
    class Program1
    {
        static void Main()
        {
            int[] arr = { 0, 1, 2, 3, 4 };
            List<int> list = new List<int>();
            List<string> Slist = new List<string>();
            List<info> one = new List<info>();
            IList testone = new ArrayList();
            for (int i = 0; i < 10; i++)
            {
                info a = new info();
                a.Name = "a";
                a.Sex = "f";
                a.Age = 20 + i;
                testone.Add(a);
            }
                for (int i = 0; i < 10; i++)
                {
                    info a = new info();
                    a.Age = i;
                    a.Name = "a";
                    a.Sex = "f";
                    one.Add(a);
                }
                System.Type typ = new info().GetType();
                System.Data.DataSet ds = ConvertToDs(one, typeof(info));
            for (int x = 5; x < 10; x++)
            {
                list.Add(x);
            }
            for (int i = 0; i < 10; i++)
            {
                Slist.Add(i.ToString() + "a");
            }        ProcessItems<int>(arr);
            ProcessItems<int>(list);
            ProcessItems<string>(Slist);
            print(one);
            for (int i = 0; i < ds.Tables[0].Rows.Count ; i++)
            {
                Console.Write(ds.Tables[0].Rows[i][0].ToString() + " " + ds.Tables[0].Rows[i][1].ToString() + " " + ds.Tables[0].Rows[i][2].ToString());
                Console.WriteLine();
            }
            Console.Read();
        }    public static System.Data.DataSet ConvertToDs(IList list, Type typ)
        {
            //Object obj;
            System.Data.DataSet ds = new System.Data.DataSet();
            System.Data.DataTable dt = ds.Tables.Add(typ.Name);
            System.Reflection.PropertyInfo[] myPro =typ.GetProperties((System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance) ); //typ.GetProperties((System.Reflection.BindingFlags.Public ));// || System.Reflection.BindingFlags.Instance));
            //System.Reflection.PropertyInfo pi;
            foreach (System.Reflection.PropertyInfo pi in myPro)
            {
                dt.Columns.Add(pi.Name, System.Type.GetType(pi.PropertyType.ToString()));
            }
        //    Next
            foreach (Object obj in list)
            {
                System.Data.DataRow dr;
               
                dr = dt.NewRow();
                foreach (System.Reflection.PropertyInfo pi in myPro)
                {
                    dr[pi.Name] = pi.GetValue(obj, null);
                }
                dt.Rows.Add(dr);
            }
            return ds;
        }    static void ProcessItems<T>(IList<T> coll)
        {
            foreach (T item in coll)
            {
                System.Console.Write(item.ToString() + " ");
                
                
            }
            System.Console.WriteLine();
        }
        static void print(List<info> items)
        {
            foreach (info item in items)
            {
                System.Console.Write(item.Name + " " + item.Age + " " + item.Sex );
                Console.WriteLine();
            }
        }}
      

  7.   

    to dragonlus(毒龙):    是 .net1.1的,不支持泛型.
      

  8.   

    to dragonlus(毒龙):      谢谢!