创建一个智能保存按钮
本文关键字:智能 保存 按钮 一个 创建 | 更新日期: 2023-09-27 17:52:40
我正在使用c#设计一个桌面应用程序。Net和MSSQL。该应用程序包含一个表单,用户可以在其中更改文本框中的一些值,然后按下按钮将其保存在数据库中。下面的代码调用一个方法来更新值并将它们插入数据库,旁边显示一个确认新更改的消息框。我的问题是,即使用户没有更改任何值并按下保存按钮,消息框也会再次出现。我试图比较文本框的值之前和之后的变化,但它不工作。有办法克服这个问题吗?
private void btnSave_Click(object sender, EventArgs e)
{
int price = Convert.ToInt32(txtPrice.Text);
Classes.Prices prices = new Classes.Prices(comboBox1.SelectedValue.ToString(),
Convert.ToInt32(txtPrice.Text),
Convert.ToInt32(txtCarbohydrate.Text),
Convert.ToInt32(txtProtein.Text),
Convert.ToInt32(txtFat.Text),
Convert.ToInt32(txtHumidity.Text),
Convert.ToInt32(txtminerals.Text));
try {
prices.updateMaterialPrice();
//this.comboBox1.Refresh();
this.txtPrice.Refresh();
int price2 = Convert.ToInt32(txtPrice.Text);
if (price2 != price)
{
MessageBox.Show("new price saved!");
}
}
catch(Exception ex)
{
throw ex;
}
foreach (Control ctrl in this.panel1.Controls)
{
if (ctrl is TextBox)
{
TextBox textbx = ctrl as TextBox;
if (textbx.ReadOnly == false)
{
textbx.ReadOnly = true;
textbx.BackColor = Color.LightBlue;
}
}
}
1-创建一个标志变量来指示用户是否已经开始修改值(我们称之为:数据已更改),初始值为False
2-将事件处理程序附加到所有文本框的Change()事件,并在事件处理程序中,将标志设置为TRUE,以表明我们现在可以安全地转到DB并保存更改的值
3-在你的Save方法开始时,检查我们的标志的值,如果它是false,那么什么都不做,但如果值是TRUE,然后去保存你的东西
例如:(伪代码)
1var dataIsChanged = false;
2 public void ChangedHandlerForTexboxes(object sender, EvenetArgs e)
{
dataIsChanged = true;
}
3
private void btnSave_Click(object sender, EventArgs e)
{
if(dataIsChanged == true)
{
int price = Convert.ToInt32(txtPrice.Text);
Classes.Prices prices = new Classes.Prices(comboBox1.SelectedValue.ToString(),
Convert.ToInt32(txtPrice.Text),
Convert.ToInt32(txtCarbohydrate.Text),
Convert.ToInt32(txtProtein.Text),
Convert.ToInt32(txtFat.Text),
Convert.ToInt32(txtHumidity.Text),
Convert.ToInt32(txtminerals.Text));
try {
prices.updateMaterialPrice();
//this.comboBox1.Refresh();
this.txtPrice.Refresh();
int price2 = Convert.ToInt32(txtPrice.Text);
if (price2 != price)
{
MessageBox.Show("new price saved!");
}
}
catch(Exception ex)
{
throw ex;
}
foreach (Control ctrl in this.panel1.Controls)
{
if (ctrl is TextBox)
{
TextBox textbx = ctrl as TextBox;
if (textbx.ReadOnly == false)
{
textbx.ReadOnly = true;
textbx.BackColor = Color.LightBlue;
}
}
}
}
}
问题是price和price2将始终具有相同的值,因为您在用户按下"保存"按钮的时刻捕获它们,因此您将始终获得消息框,它是这样的:用户更改价格文本框,然后用户按下"保存"按钮并运行"btnSave_Click"方法,因此此时txtPrice具有用户键入的值。
我建议有一个单独的数据访问层,使用类似实体框架的东西,然后你可以询问实体,如果它的任何值已经改变。检查这些,它们可能会对你有所帮助:
实体框架:检查是否有特定实体的更改要保存
http://www.codeproject.com/Articles/615499/Models-POCO-Entity-Framework-and-Data-Patterns