日期:2014-05-20  浏览次数:20448 次

DataGrid不能绑定数据
我有一个函数A返回一个OracleDataGrid
函数B将A转换成DataTable
然后我去绑定一个DataGrid
A如下
public   static   OracleDataReader   GetAnalysedInfo()
{
OracleDataReader   dr   =   null;
DataBase   db   =   new   DataBase();
string   sqlStr   =   "select   MID,   NTH   from   maintable   where   isanalysed   =   1 ";
try
{
db.CreateDataReader(sqlStr,   out   dr);
}
catch(Exception   e)
{
throw   new   Exception( "得到已经分析完的图幅出错 ",   e);
}

return   dr;
}  
B如下
public   static   DataTable   ConvertDataReaderToDataTable(OracleDataReader   dataReader)
{
DataTable   datatable   =   new   DataTable();
DataTable   schemaTable   =   dataReader.GetSchemaTable();
//动态添加列
try
{

foreach(DataRow   myRow   in   schemaTable.Rows)
{
DataColumn   myDataColumn   =   new   DataColumn();
myDataColumn.DataType =   myRow.GetType();
myDataColumn.ColumnName   =   myRow[ "ColumnName "].ToString();
datatable.Columns.Add(myDataColumn);
}
//添加数据
while(dataReader.Read())
{
DataRow   myDataRow   =   datatable.NewRow();
for(int   i=0;i <schemaTable.Rows.Count;i++)
{
myDataRow[i]   =   dataReader[i].ToString();
}
datatable.Rows.Add(myDataRow);
myDataRow   =   null;
}
schemaTable   =   null;
dataReader.Close();
return   datatable;
}
catch(Exception   e)
{
throw   new   Exception( "转换为DataTable出错! ",   e);
}

}

结果绑定时报错
ID   为“DataGrid1”的   DataGrid   未能从选定数据源自动生成任何列。

但是我用这个DataTable的某个列来绑定一个DropDownList时却没有问题


------解决方案--------------------
AutoGenerateColumns 为 true 时 dategrid 会在绑定时自动生成列
一般来说你指定绑定数据字段后应设为 false