DataReader 填充 DataTable <script src="http://blog.csdn.net/count.aspx?ID=1734093&Type=Rank" type="text/javascript"></script>
一、引言
Repeater 绑定到 DataReader是一种常用高效的数据绑定形式。有时可使用ASP.NET2.0的数据源控件(DataSource),但感觉不够灵活。
在一般情况下,Repeater与DataReader直接绑定就行:
SqlDataReader dr
=
new
SqlUtility.ExecuteReader(...);
repeater.DataSource = dr;
repeater.DataBind();
repeater.DataSource = dr;
repeater.DataBind();
但有的时候,如做二级分类时repeater数据绑定的同时,DropDownList也要绑定到同样的数据源,直接用DataReader不得不再次读取数据,如果DataReader读取的数据保存到DataTable就可以实现N次绑定。
二、实现
1、直接用DataReader填充DataTable
代码如下:
//飘遥:http://blog.csdn.net/zxjay
public
DataTable DataReaderToDataTable(IDataReader reader)
{
DataTable tb = new DataTable();
DataColumn col;
DataRow row;
int i;
for (i = 0 ; i < reader.FieldCount; i ++ )
{
col = new DataColumn();
col.ColumnName = reader.GetName(i);
col.DataType = reader.GetFieldType(i);
tb.Columns.Add(col);
}
while (reader.Read())
{
row = tb.NewRow();
for (i = 0 ; i < reader.FieldCount; i ++ )
{
row[i] = reader[i];
}
tb.Rows.Add(row);
}
return tb;
}
{
DataTable tb = new DataTable();
DataColumn col;
DataRow row;
int i;
for (i = 0 ; i < reader.FieldCount; i ++ )
{
col = new DataColumn();
col.ColumnName = reader.GetName(i);
col.DataType = reader.GetFieldType(i);
tb.Columns.Add(col);
}
while (reader.Read())
{
row = tb.NewRow();
for (i = 0 ; i < reader.FieldCount; i ++ )
{
row[i] = reader[i];
}
tb.Rows.Add(row);
}
return tb;
}
2、ASP.NET2.0有更简单的方法:
DataTable dt
=
new
DataTable();
dt.Load(IDataReader);
dt.Load(IDataReader);
一条语句搞定。
DataTable.Load(...)的具体实现可以参看开源的Mono项目(http://www.go-mono.com)。
文件位置:(mono-1.2.4/mcs/class/System.Data/System.Data/DataTable.cs)
3、总结:
无^_^