vs2003 winform
datagrid中只要选中行,按delete键,就可以对该行进行删除操作
现在我希望在用户按delete键的时候谈出提示框,如果确定删除那就继续执行操作
如果用户取消删除,那么该行的删除事件无效我现在是在DataTable的RowDelete事件中进行操作的
代码如下
……
DataTableName.RowDeleting+=new DataRowChangeEventHandler(dt_RowDeleting);
……
private void dt_RowDeleting(object sender, DataRowChangeEventArgs e)
{
    DialogResult objResult=MessageBox.Show(this,"您确定要删除吗?","",MessageBoxButtons.YesNo);
    if(objResult == DialogResult.No)
    {
MessageBox.Show("删除取消");
return;    //这里不知道该如何写才能取消这个RowDeleting事件
     }
}

解决方案 »

  1.   

    如何在DataGrid中按Del键进行删除之前能给出提示以求确认
    http://blog.csdn.net/knight94/archive/2006/03/31/646264.aspx
      

  2.   

    to Knight94(愚翁)
    一定要重新构造DataGrid吗?
    直接在DataGrid中操作不行吗?
    我上面的那段代码,就差结束DataTable的RowDeleting事件了
    难道说结束Deleting事件,让Delete不执行,是没办法实现的?
      

  3.   

    to 我上面的那段代码,就差结束DataTable的RowDeleting事件了
    难道说结束Deleting事件,让Delete不执行,是没办法实现的?这个事件没有中途而废之说,由于一个已经被删掉的DataRow,你是无法访问的,因此无法调用Datarow.RejectChanges来回朔,那么相对于DataRow以上最近的集合就是DataTable,但是如果调用DataTable.RejectChanges可以进行回朔,但同时也拒绝了对于此表的其他更新操作。
      

  4.   

    那这么看来,这个问题似乎很麻烦因为事实上我希望可以实现类似这样的效果:  指定一个DataGrid中的前十行,不能被删除,后面的都可以删除实现这样的效果是否会很麻烦。
      

  5.   

    怎么会有这样的需求?
    前10行不能删除,后面的可以删除?
    反正我不懂winform
    只是帮你up~
      

  6.   

    to cancerser(都是混饭吃,记得要结帖)
    你的意思是不是先把dataview.allowdelete设置成false
    然后再进行具体的删除操作?
      

  7.   

    RowDeleting这个事件也真奇怪?怎么成了删除后出发了
    在webform里是删除前的,2005中的webform里增加了一个RowDeleted是删除后的
    2003的winform真是.............
      

  8.   

    to yiyioo(天一(找工作!)) 
    RowDeleting这个时间实在删除前触发的
    问题就是,触发了以后,不能及时结束
    就好象刹车失灵了
      

  9.   

    比如写在 delete键的事件中, 确认删除了 才执行删除,这不就回避了以后的问题
      

  10.   

    to cancerser(都是混饭吃,记得要结帖)
    问题就在于这个delete键的事件
    因为按了键盘上的delete键,一按,就触发一个RowDeleting事件(这个事件是在删除之前的),
    现在的问题是没有办法让RowDeleting事件不执行,或者说让RowDeleting事件执行以后
    不执行接下来的事件
      

  11.   

    RowDeleting事件是不能阻止时间的发生的 e.Action是事件的状态可惜他是只读的
      

  12.   

    to czhenq(在天堂与地狱之间穿梭) 
    键盘上的Delete键,似乎捕获不到
      

  13.   

    if(e.KeyCode=Keys.Delete)
    {
    DialogResult objResult=MessageBox.Show(this,"您确定要删除吗?","",MessageBoxButtons.YesNo);
    if(objResult == DialogResult.No)
    {
    MessageBox.Show("删除取消");
    e.Handled=true;//关键
    return;    
    }
    else
    {
    }
    }//试试看
      

  14.   

    to scow(怡红快绿)
    没有e.Cancel属性
      

  15.   

    to cancerser(都是混饭吃,记得要结帖)
    dataGrid 的KeyDown事件测试不成功
    他最先捕获的是RowDeleting事件,执行完了以后,也就执行不料KeyDown事件了
      

  16.   

    谢谢各位啦
    DataGrid真是难伺候啊
      

  17.   

    to scow(怡红快绿) 
    愚翁的办法很好
    但是似乎不能解决根据条件,自动判断能否删除的效果
      

  18.   

    他大爷的  玩命了 试试这个
    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg,System.Windows.Forms.Keys e) 
    {
    if(dataGrid1.Focused||dataGrid1.ContainsFocus)
    {
    if(e==Keys.Delete)
    {
    DialogResult objResult=MessageBox.Show(this,"您确定要删除吗?","",MessageBoxButtons.YesNo);
    if(objResult == DialogResult.No)
    {
    MessageBox.Show("删除取消");
    return true;
    }
    }
    }
    return false;
    }
      

  19.   

    判断是否是从datagrid的记录是否是新增的
    如果是新增的,删除有效,如果不是新增的,删除无效果
      

  20.   

    事实上我希望可以实现类似这样的效果:  指定一个DataGrid中的前十行,不能被删除,后面的都可以删除
      

  21.   

    搞定了
    我是这么操作的
    先把DataTableName.DefaultView.AllowDelete 设置为false
    默认情况下不能执行删除操作
    这样,再用KeyDown事件,就可以捕获Delete键了
    private void DataGridName_KeyDown(object sender, KeyEventArgs e)
    {
        if(e.KeyCode == Keys.Delete)
        {
            DialogResult objResult=MessageBox.Show(this,"您确定要删除吗?","",MessageBoxButtons.YesNo);
            if(objResult == DialogResult.Yes)
            {
                DataTableName.Rows[DataGridName.CurrentRowIndex].Delete();
             }
        }
    }
      

  22.   

    我写的那个就行,完全可以屏蔽掉 delete按键事件
      

  23.   

    还是有点小问题,是DataGrid的问题
    Rows[这里的定位]有点不准
    还在想办法
      

  24.   

    to cancerser(都是混饭吃,记得要结帖)
    你那个我也试试
      

  25.   

    to cancerser(都是混饭吃,记得要结帖)
    你的那个屏蔽效果,非常理想