我有一段通过DataGrid(Windows)删除DataRow的代码,删除后发现再次点击已删除那行的时候(比如我删除第二行,然后再点击第二行)会出现一个"Deleted row information cannot be accessed through the row"的错误. 不知道是什么原因,下面是相关的代码,请帮我分析一下原因,谢谢了:这段代码是在继承的DataGrid类里重写ProcessCmdKey
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if(Keys.Delete == keyData)
{
CurrencyManager cm = (CurrencyManager)this.BindingContext[this.DataSource, this.DataMember];
ArrayList list = new ArrayList();
for(int i = cm.Count - 1; i >= 0; i--)
if(this.IsSelected(i))
list.Add(i);
if(0 == list.Count)
return base.ProcessCmdKey (ref msg, keyData);
if(DialogResult.No == MessageBox.Show("确定要删除记录吗?", "删除", MessageBoxButtons.YesNo,MessageBoxIcon.Warning,MessageBoxDefaultButton .Button2))
return true;
else
{
DataRowView rv = null;
foreach(int x in list)
{
cm.Position = x;
rv = (DataRowView)cm.Current;
rv.Row.Delete();                    }
return true;
}
}
else
return base.ProcessCmdKey (ref msg, keyData);
}

解决方案 »

  1.   

    if(DialogResult.No == MessageBox.Show("确定要删除记录吗?", "删除", MessageBoxButtons.YesNo,MessageBoxIcon.Warning,MessageBoxDefaultButton .Button2))
     return base.ProcessCmdKey (ref msg, keyData);
    else return false;
    应该就可以了吧
      

  2.   

    Deleted row information cannot be accessed through the row
    就是说,不能访问已经删除了的行的信息。
      

  3.   

    比如说
    DataRow dr;
    一般访问这个行的某个字段
    通过dr["COLUMNNAME"]来访问
    但是当这个dr的RowState是DataRowState.Delete的话
    则需要通过
    dr["COLUMNNAME",DataRowVersion.Original]这样的方式来访问改行的数据。
      

  4.   

    检查你的代码,找到试图通过dr["ColumnName"]来访问的地方看看有没有判断dr的RowState不是所有的dr都可以直接dr["ColumnName"]这样子来访问的.....
      

  5.   

    在访问前,先判断一下当前行的状态!
    如:
    if (…….RowState <> DataRowState.Deleted)
      

  6.   

    我不是要编辑已删除的行,我的意思是这样:
    比如说删除了第二行,这时候第三行串到了第二行,然后再点击第二行的位置(也就是点击原来的第三行),DataGrid会报错