我最近在Visual Studio中创建了一个数据库。我有两种形式,第一种形式显示一个表格。第二个表单连接到第一个表,并在设计视图中显示信息。
当用户在设计视图中更改数据时,如果他们单击“保存”,则在关闭第二个表单时,将在原始表单上更新更改的信息。
但是,如果他们在未保存的情况下关闭表单,原始表单上的信息将保持不变。
我想创建一个“保存”按钮,以清楚地向用户显示他们必须保存他们在设计视图中所做的任何更改。
有没有人之前创建过“保存”按钮?对于连接到另一个表单的表单,而不是文件?
答案 0 :(得分:0)
使用事件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;
}
}
答案 1 :(得分:0)
不确定我是否理解你的问题,但我把这个小例子放在一起试图复制你所问的问题。
以下是主要表格:
主窗体包含一个数据网格视图(显示可能来自数据库的数据)和一个用于打开第二个窗体的编辑按钮,该窗体将用于编辑网格中所选项的DataValue视图。 Form2(编辑表单)如下所示:
如您所见,我在Form2上放了一个Save按钮和一个Cancel按钮。我使用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的非模态版本,那么您将无法在编辑按钮事件中执行所有这些操作。相反,您必须生成一个新的编辑表单并处理它的close事件。然后,您需要将更新网格视图的代码移动到此关闭事件中。每个衍生的编辑表单都需要记住它正在编辑哪个数据行,以便close事件可以更新正确的行。
我希望这会有所帮助。
答案 2 :(得分:0)
因此,如果要保存它,可以将此代码用于保存按钮
// 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();