我把xml文件读入到dataset中作为DataGrid的数据源。实际应用中需要读入不同的xml文件(架构相同)到dataset中。每次读一个新的xml文件之前,先把dataset清空掉,然后再把DataGrid的DataSource设置为这个dataset。程序中我要用到DataRowView drv = (DataRowView) this.BindingContext[this.dataGrid1.DataSource].Current这条语句获取数据源当前记录,进而得到它对应的DataRow,再取出它某个字段的值。现在问题是这样的:导入第一个xml文件的时候,上述语句能正常工作;而导入第二个xml文件之后,执行到这条语句就会抛出一个InvalidCastException,指定的类型转换无效。这是怎么回事呢?为什么第一个xml文件导入后运行正常,之后就不行了?
所涉及的代码如下:
                   private void btnSubmitChanges_Click(object sender, System.EventArgs e) {
string constName = null;
if ( this.dataSet1.Tables.Count != 0 && this.dataSet1.Tables["Const"].Rows.Count != 0) {
DataRow dataRow = GetCurrentDataRow();
constName = dataRow["ConstName",DataRowVersion.Current].ToString(); //...
}
} private DataRowView GetCurrentDataRowView(){
DataRowView drv = null;
try{
drv = (DataRowView) this.BindingContext[this.dataGrid1.DataSource].Current;
}catch(InvalidCastException e){
//... }finally{
}
return drv; } private DataRow GetCurrentDataRow( ){
DataRow dr = null;
dr = GetCurrentDataRowView().Row;
return dr;
}

解决方案 »

  1.   

    没必要非得用dataView  用dataSet.tables[].rows集合一回事
      

  2.   

    问题是我的DataGrid中显示的是对dataset里面的一个表进行筛选后的DataView,所以我要得到当前选中的DataView的行对应的DataTable中的行,这样才能得到正确的值。
      

  3.   

    在装入第二个xml前重新进行帮定一次试试;
      

  4.   

    终于发现问题了。原来是在打开第二个xml后没有更新DataView。汗!
    谢谢_jfeng(静心)的提醒。