“BindingNavigator”如何在删除前弹出确认框?

问题的缘起在于有一个学习数据操作的人询问我“BindingNavigator”如何点击“删除”前进行确认。我一开始模拟创建了一个表,然后通过设计器的方式生成了这四类控件,随后拖拽一个Navigator到WinForm上,双击红色叉叉部分,写入一个MessageBox判断用户究竟是否需要取消——显然不起作用。

于是反推引发该Delete事件的方法必然是先调用了SQL相关语句删除了当前记录,然后引发了Delete事件,于是兴冲冲地查看BindingNavigator关于Delete的方法,希望可以重写——

[C#]

private void OnDelete(object sender, EventArgs e)
{
    if (this.Validate() && (this.bindingSource != null))
    {
        this.bindingSource.RemoveCurrent();
        this.RefreshItemsInternal();
    }
}

[VB.NET]

Private Sub OnDelete(ByVal sender As Object, ByVal e As EventArgs)
    If (Me.Validate AndAlso (Not Me.bindingSource Is Nothing)) Then
        Me.bindingSource.RemoveCurrent
        Me.RefreshItemsInternal
    End If
End Sub

Fuck(请抱歉我说粗话了)——这个方法竟然是私有的!

怎么办?也没有任何Deleting(进行时)的事件啥的……欲哭无泪的我无意发现这样一个属性:DeleteItem——这个控件如果设置为“空”(Null),那么完全就可以让你自己来编程啦!于是:

1)先设置DeleteItem为空,不让它调用自动生成的删除代码(因为我要自己编写逻辑滴!)

2)代码如下(这里MyData啥的全都是生成的强类型数据集):

[C#]

private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确认删除吗?", "删除前确认", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                myDbTestDataSet.myTable.Rows[bindingNavigator1.BindingSource.Position].Delete();
            }
        }

[VB.NET]

Private Sub bindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs)
    If MessageBox.Show("确认删除吗?", "删除前确认", MessageBoxButtons.OKCancel) = DialogResult.OK Then
        myDbTestDataSet.myTable.Rows(bindingNavigator1.BindingSource.Position).Delete()
    End If
End Sub

一般地,BindingNavigator上面全部的按钮——绑定到数据源的时候(假设生成了CRUD等方法),都有两大类运行模式:
1)自动,就是默认设置,无需做任何操作。
2)手动,像我设置一样——把XXXItem设置为“空”(Null),然后编码进行。此时的Navigator好比只是一个带有数据源的一个普通工具条,你完全可以自定义。

posted @ 2012-12-01 16:51  Serviceboy  阅读(1105)  评论(0编辑  收藏  举报