如何:向 Windows 窗体 BindingNavigator 控件添加“加载”、“保存”和“取消”按钮
BindingNavigator 控件是一种特殊用途的 ToolStrip 控件,用于导航和操作窗体中绑定到数据的控件。
因为它是 ToolStrip 控件,所以可以轻松修改 BindingNavigator 组件以包含用户的其他或替代命令。
在以下过程中,TextBox 控件绑定到数据,并且添加到窗体的 ToolStrip 控件被修改为包括“加载”、“保存”和“取消”按钮。
向 BindingNavigator 组件添加“加载”、“保存”和“取消”按钮
在 Visual Studio 中,向窗体添加 TextBox 控件。
将其绑定到 BindingSource(绑定到数据源)。 对于此示例,BindingSource 绑定到数据库。
生成数据集和表适配器后,将 BindingNavigator 控件拖到窗体中。
将 BindingNavigator 控件的 BindingSource 属性设置为绑定到控件的窗体中的 BindingSource。
选择 BindingNavigator 控件。
单击设计器操作字形 (),随即显示“BindingNavigator 任务”对话框,此时请选择“编辑项”。
随即显示“项集合编辑器”。
在“项集合编辑器”中,完成以下操作:
通过选择相应类型的 ToolStripItem 并单击“添加”按钮,添加一个 ToolStripSeparator 和三个 ToolStripButton 项。
将按钮的 Name 属性分别设置为“LoadButton”、“SaveButton”和“CancelButton”。
将按钮的 Text 属性设置为“Load”、“Save”和“Cancel”。
将每个按钮的 DisplayStyle 属性设置为“Text”。 或者,也可以将此属性设置为“Image”或“ImageAndText”,并设置要在 Image 属性中显示的图像。
单击 “确定” 关闭对话框。 按钮会被添加到 ToolStrip。
右键单击窗体并选择“查看代码”。
在“代码编辑器”中,找到将数据加载到表适配器中的代码行。 此代码是在步骤 2 中设置数据绑定时生成的。 该代码应与以下代码相似:
TableAdapterName.Fill(DataSetName.TableName)
。 它很可能位于窗体的 Load 事件中。为你之前创建的负载 Load ToolStripButton 的 Click 事件创建事件处理程序,并将此数据加载代码移入其中。
现在,代码应类似于如下内容:
Private Sub LoadButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadButton.Click TableAdapterName.Fill(DataSetName.TableName) End Sub
private void LoadButton_Click(System.Object sender, System.EventArgs e) { TableAdapterName.Fill(DataSetName.TableName); }
为之前创建的 SaveToolStripButton 的 Click 事件创建事件处理程序,并编写代码来更新控件绑定到的表中的数据。
Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveButton.Click TableAdapterName.Update(DataSetName.TableName) End Sub
private void SaveButton_Click(System.Object sender, System.EventArgs e) { TableAdapterName.Update(DataSetName.TableName); }
注意
在某些情况下,BindingNavigator 组件已有“保存”按钮,但 Windows 窗体设计器没有生成任何代码。 在这种情况下,可以将前面的代码放在该按钮的 Click 事件处理程序中,而不是在 ToolStrip 上创建一个全新的按钮。 但是,默认情况下,该按钮处于禁用状态,因此必须将该按钮的 Enabled 属性设置为
true
才能使该按钮正常工作。为你之前创建的 Cancel ToolStripButton 的 Click 事件创建事件处理程序,并编写代码以取消对显示的数据记录的任何更改。
Private Sub CancelButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CancelButton.Click BindingSourceName.CancelEdit() End Sub
private void CancelButton_Click(System.Object sender, System.EventArgs e) { BindingSourceName.CancelEdit(); }
注意
CancelEdit 方法的作用域为数据行。 在导航到下一条记录之前,请先保存在查看单条记录时所做的任何更改。