将一个集合转换为一个DataTable
suncsea 2006/12/7
在实际工作中,会遇到要求将一个集合如ArrayList转化成一个DataTable的情况,这样充分利用DataView等进行多条件排序等处理。有许多方式可以实现,下面主要介绍一种比较简单的方法:反射方式,希望能给读者一定的参考。
suncsea 2006/12/7
前提:
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>