我最近在 Visual Studio 中创建了一个数据库。我有两个表格,第一个表格显示一个表格。第二个窗体连接到第一个表并在设计视图中显示信息。
当用户在设计视图中更改数据时,如果他们单击保存,则在关闭第二个表单时,更改的信息会在原始表单上更新。
但是,如果他们关闭表单而不保存,则原始表单上的信息保持不变。
我想创建一个保存按钮,以清楚地向用户显示他们必须保存他们在设计视图中所做的任何更改。
以前有没有人创建过“保存”按钮?对于连接到另一个表单的表单,而不是文件?
使用事件 FormClosing 怎么样?
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Do you want to save changes to your table?", "My Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
e.Cancel = true;
}
}
不确定我是否正确理解了您的问题,但我将这个小示例放在一起尝试复制您的问题。
这是主要形式:
主窗体由一个数据网格视图(显示可能来自数据库的数据)和一个编辑按钮组成,该按钮用于打开第二个窗体,该窗体将用于编辑网格视图中所选项目的 DataValue。Form2(编辑表单)如下所示:
如您所见,我在 Form2 上放置了一个保存按钮和一个取消按钮。我将 Form2 用作模式对话框表单(因此在 Form2 打开时无法更改测试表单)。这意味着我可以设置 Save 和 Cancel 按钮的 DialogResult 属性,并使用它们来通知 TestForm 要做什么。保存按钮设置为 ,DialogResult = OK
取消按钮设置为DialogResult = Cancel
。
我还向 From2 添加了一个特殊的公共属性,可用于获取和设置数据。在我的情况下,这只是一个简单的字符串,但在更高级的情况下,这将获取并设置一个特殊类型的对象,或者可能是表中的一个数据行。这是我的财产:
public string DataValue
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
现在,在 TestForm 上的编辑按钮后面,我有以下事件代码:
private void EditButton_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count != 1) { return; }
string data = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
// show the form as a modal dialog box while editing.
Form2 editForm = new Form2();
editForm.DataValue = data;
if (editForm.ShowDialog() == DialogResult.OK)
{
// If the user clicks Save then we want to update the datagrid
// (and eventually the database).
dataGridView1.SelectedRows[0].Cells[1].Value = editForm.DataValue;
}
}
如果您需要 Form2 的非模态版本,那么您将无法在编辑按钮事件中完成所有这些操作。相反,您将不得不生成一个新的编辑表单并处理它的关闭事件。然后,您需要将更新网格视图的代码移动到此关闭事件中。每个生成的编辑表单都需要记住它正在编辑的数据行,以便关闭事件可以更新正确的行。
我希望这有帮助。
所以如果你想保存它,你可以使用这个代码作为保存按钮
// Displays a SaveFileDialog so the user can save the Image
// assigned to Button2.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "html|*.html|lua file|*.lua|text
document|*.txt|video|*.mp4|image|*.jpg";
saveFileDialog1.Title = "save project";
saveFileDialog1.ShowDialog();
// If the file name is not an empty string open it for saving.
if (saveFileDialog1.FileName != "")
{
// Saves the Image via a FileStream created by the OpenFile method.
System.IO.FileStream fs =
(System.IO.FileStream)saveFileDialog1.OpenFile();
// Saves the Image in the appropriate ImageFormat based upon the
// File type selected in the dialog box.
// NOTE that the FilterIndex property is one-based.
switch (saveFileDialog1.FilterIndex)
{
case 1:
this.button2.Image.Save(fs,
//change button number to what your button number is
System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case 2:
this.button2.Image.Save(fs,
System.Drawing.Imaging.ImageFormat.Bmp);
break;
case 3:
this.button2.Image.Save(fs,
System.Drawing.Imaging.ImageFormat.Gif);
break;
}
fs.Close();