我有一个函数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时却没有问题