大家好: 下面是我利用的一个把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]
着急!!
代码: /// <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]
着急!!
这行代码应该去掉,它是我找错误用的,不好意思! 请高手指点
foreach (System.Reflection.PropertyInfo pi in myPropertyInfo)
{
dt.Columns.Add(pi.Name, System.Type.GetType(pi.PropertyType.ToString()));
}
请高手指点!!!
谢谢大家!!!!!!!!!!!!!!!!!!!!!!!!1
改为-〉
object o = pi.GetValue(obj,null);
看看o有没值
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();
}
}}