iCo*_*min 2 c# wpf xaml stored-procedures
我正在寻找一种简单的方法来检查自打开表单后文本框或日期选择器是否已更改.如果它然后运行存储过程,否则只是跳过它并运行已经更改的那些.
是)我有的:
internal static string oldAvgRate;
internal static string oldOTRate;
internal static string ratetype;
internal static string ratetypeOT;
private string UpdateRate(string dateFrom, string newRate, string oldRate, string ratetype, string description){
string connectionString = "datasource=;port=;username=;password=";
MySqlConnection connection = new MySqlConnection(connectionString);
try
{
connection.Open();
MySqlCommand cmd = new MySqlCommand("UpdateRate", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@p_DateFrom", MySqlDbType.Date).Value = dateFrom;
cmd.Parameters.Add("@p_NewAmount", MySqlDbType.Decimal).Value = newRate;
cmd.Parameters.Add("@p_OldAmount", MySqlDbType.Decimal).Value = oldRate;
cmd.Parameters.Add("@p_RateType", MySqlDbType.VarChar).Value = ratetype;
cmd.Parameters.Add("@p_Description", MySqlDbType.VarChar).Value = description;
cmd.ExecuteNonQuery();
connection.Close();
return newRate;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return null;
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
oldAvgRate = UpdateRate(dfAvgR.SelectedDate.Value.ToString("yyyy-MM-dd"), txtAvgR.Text, oldAverageRate, ratetype, txtdescriptionAvgR.Text);
oldOTRate = UpdateRate(dfOTR.SelectedDate.Value.ToString("yyyy-MM-dd"), txtOTR.Text, oldOTRate, ratetypeOT, txtdescriptionOTR.Text);
}
Run Code Online (Sandbox Code Playgroud)
例如:if txtAvgR.Text和/或df.AvgR.Value已更改然后运行oldAvgRateelse跳过并运行oldOTRateif txtOTR.Text和/或df.OTR.Value已更改否则不运行其中任何一个并显示MessageBox("Nothing has changed").
我怎样才能做到这一点?在我的情况下,最好的方法是什么?谢谢.
根据@ Picnic8和@Robert Harvey的建议更新:
XAML:
<TextBox x:Name="txtAvgR" TextChanged="textChangedEventHandler" IsEnabled="False"/>
<TextBox x:Name="txtOTR" TextChanged="textChangedEventHandler" IsEnabled="False"/>
Run Code Online (Sandbox Code Playgroud)
C#:
private bool hasChangedFlag;
// TextChangedEventHandler delegate method.
private void textChangedEventHandler(object sender, TextChangedEventArgs args)
{
hasChangedFlag = true;
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
if (hasChangedFlag)
{
oldAvgRate = UpdateRate(dfAvgR.SelectedDate.Value.ToString("yyyy-MM-dd"), txtAvgR.Text, oldAvgRate, ratetype, txtdescriptionAvgR.Text);
oldOTRate = UpdateRate(dfOTR.SelectedDate.Value.ToString("yyyy-MM-dd"), txtOTR.Text, oldOTRate, ratetypeOT, txtdescriptionOTR.Text);
MessageBox.Show("Done", "Test", MessageBoxButton.OK);
}
else
{
MessageBox.Show("Nothing has changed", "Test", MessageBoxButton.OK);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
根据@Robert Harvey的建议,这是一种实现标志的方法.
更新
private bool txtAvgRHasChangedFlag;
private bool txtOTRRHasChangedFlag;
// TextChangedEventHandler delegate method.
private void textChangedEventHandler(object sender, TextChangedEventArgs args)
{
var control = sender as TextBox;
if (control.Name == "txtAvgR")
txtAvgRHasChangedFlag = true;
else if (control.Name == "txtOTR")
txtOTRHasChangedFlag = true;
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
if (txtAvgRHasChangedFlag)
{
oldAvgRate = UpdateRate(dfAvgR.SelectedDate.Value.ToString("yyyy-MM-dd"), txtAvgR.Text, oldAvgRate, ratetype, txtdescriptionAvgR.Text);
MessageBox.Show("Done", "Test", MessageBoxButton.OK);
}
if (txtOTRRHasChangedFlag)
{
oldOTRate = UpdateRate(dfOTR.SelectedDate.Value.ToString("yyyy-MM-dd"), txtOTR.Text, oldOTRate, ratetypeOT, txtdescriptionOTR.Text);
MessageBox.Show("Done", "Test", MessageBoxButton.OK);
}
if (!txtOTRRHasChangedFlag && !txtAvgRHasChangedFlag)
{
MessageBox.Show("Nothing has changed", "Test", MessageBoxButton.OK);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在您的XAML中,只需像这样引用此事件委托
<TextBox x:Name="txtAvgR" TextChanged="textChangedEventHandler" IsEnabled="False"/>
<TextBox x:Name="txtOTR" TextChanged="textChangedEventHandler" IsEnabled="False"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |