2017-12-13 11 views
0

私はSystem.Windows.Controls.DatePicker名=「rMethod」)コンポーネントを持っていると私は、その値が外部から設定されたときに、このイベントが呼び出されます:カスタムイベント引数をSelectedDateChangedイベントで呼び出しますか?

private void rMetod_SelectedDateChanged(object sender, SelectionChangedEventArgs e) 

私はのための二重の義務を持っていますこの日付ピッカー。テーブルに日付があるとき、この日付ピッカーをデータベースから埋めたいと思っています。また、日付データがない場合は、この日付選択ツールで選択した日付をデータベースに保存することができます。

rMethod.Text = "10/10/1970" 

しかし、私のINSERTのSQLコマンドは、私はこの文を使用するときに同じイベントが呼び出されることから、重複キーSQLの例外が発生し、テーブル内の日付データがある場合にも呼び出されますどのようにしてSelectedDateChangedをカスタムargsで呼び出すことができますか?正しいアクションを解決するにはどうしたらいいですか?すなわち、previoslyに保存されたテーブルに日付データがない場合はINSERTを実行し、この日付ピッカーはプリフェッチされた値ですか?

+0

ロジックをrMetod_SelectedDateChangedに実装します。つまり、すでにレコードがあるかどうかを確認します。 – mm8

答えて

2

あなたは間違った方向に向かっていると思います。 EventArgsは手動でインスタンス化されることは想定されておらず、イベントハンドラは手動で呼び出されるべきではありません。 SelectionChangedEventArgsDatePickerに固執するのではなく、両方のケースを処理できる方法にロジックを移動してください。

たとえば、その日付を処理するいくつかのグローバルフラグを設定できます。日付が存在する場合は、この

if (reader["Date"] != DbNull.Value) 
    dateExists = true; 

後に、あなたの挿入方法では、あなたのフラグをチェックすることができますし、それに応じて同様に、フラグをtrueに設定し

public partial class MainWindow : Window 
{ 
    bool dateExists = false; 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
} 

あなたは、データベースからデータをフェッチしています、日付を設定します。

if (!dateExists) //there was no date in database 
    cmd.Parameters.AddWithValue("@date", DateTime.Now); 
else 
    cmd.Parameters.AddWithValue("@date", rMethod.SelectedDate); 

このアプローチを理解していただければ幸いです。

関連する問題