我正在尋找一個簡單的方法來檢查,如果一個文本框或日期選擇器已經改變了形式打開之前已經改變。如果確實存在,那麼運行存儲過程,否則只需跳過它並運行已經更改的那些存儲過程。檢查文本框或日期選擇器運行存儲過程C#
我有什麼:
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);
}
例如:如果txtAvgR.Text
和/或df.AvgR.Value
已經改變,那麼運行oldAvgRate
否則跳過並運行oldOTRate
如果txtOTR.Text
和/或df.OTR.Value
已經改變別人不運行任何並顯示MessageBox(「Nothing has changed」)。
我該如何做到這一點?對我來說最好的辦法是什麼?謝謝。
更新基礎上的建議來自@ Picnic8和@Robert哈維:
XAML:
<TextBox x:Name="txtAvgR" TextChanged="textChangedEventHandler" IsEnabled="False"/>
<TextBox x:Name="txtOTR" TextChanged="textChangedEventHandler" IsEnabled="False"/>
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;
}
}
設置一個布爾標誌的'txtAvgR'和'dv.AvgR的'AfterUpdate'事件'。在你的'btnSave_Click'方法中檢查這個標誌。 –
謝謝你的建議羅伯特。我不知道從哪裏開始,我仍然在學習。你能告訴我你會怎麼做嗎?我很感激。 – iCosmin
是否沒有用於文本框text.changed的事件偵聽器模板?我建議有此text.changed事件監聽器設置一個標誌,你的btnSave指該標誌 https://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged(v= vs.110).aspx –