本帖最后由 ddowncc 于 2012-09-20 10:49:07 编辑

解决方案 »

  1.   


    dataGridView只有一行数据的时候,选中这一行数据,按"delete"键,userDeletingRow、userDeletedRow事件是不会触发的。一行以上数据时,事件才会触发。
      

  2.   

    参考:http://topic.csdn.net/u/20071224/16/11882dad-97ff-4e4d-810a-d1c5b3c3108a.html我的问题和这个一样。“UserDeletedRow事件在删除最后一行的时候,该事件竟然不激发汗~~
    删除其它行没有任何问题,只是最后一行的时候,相应的操作都不会激发事件
    包括UserDeletedRow、UserDeletingRow、NewRowNeeded等事件。”
      

  3.   

    为什么要那样删除呢,自己写个方法不行吗?private void FrmItemBackApply_KeyDown(object sender, KeyEventArgs e)
            {
                if (!dgv_Data.Focused)
                {
                    return;
                }
                if (dgv_Data.Rows.Count <= 0)
                {
                    return;
                }
                if (Keys.Delete == e.KeyCode)
                {
                    if (dgv_Data.Rows.Count > 0 && dgv_Data.CurrentCell.IsInEditMode)
                    {
                        return;
                    }
                    DelGridRow();
                }
            }
            private void DelGridRow()
            {
                if (PageState == WinState.Add || PageState == WinState.Modify)
                {
                    DataGridViewRow row = dgv_Data.CurrentRow;
                    itemHash.Remove(row.Cells["flngstockallotid"].Value.ToInt());
                    dgv_Data.Rows.Remove(row);
                }
            }
    这是我的删除行,你看一下。
      

  4.   


    问题的关键是,为什么剩下最后一行时,为什么delete的相关事件不触发呢?想删除那行容易,但这个问题比较难。
      

  5.   

    从未用过那个事件,只用过DataTable的相关事件:RowDeleted、RowDeleting等,那个事件没任何问题。
    如果是List<T>,也有相关事件,对数据源设置事件不是更好吗?换个控件代码都不必重写。
      

  6.   

    客户根本不关心你用什么方法删除的,只需要达到效果又不影响效率即可,何必纠结于这个产自VS自身的bug呢...
      

  7.   

    自己已解决,用SelectionChanged代替