使用自定义事件args调用SelectedDateChanged事件?

时间:2017-12-13 09:33:37

标签: c# sql-server wpf datepicker

我有一个 System.Windows.Controls.DatePicker name =" rMethod" )组件,当我从外面设置它的值时,这个事件被调用:

private void rMetod_SelectedDateChanged(object sender, SelectionChangedEventArgs e)

我有这个日期选择器的双重职责。当表格中有日期时,我想从数据库中填写这个日期选择器。当没有日期数据时,我希望这个日期选择器能够将所选日期保存到数据库中。

但是,即使表中存在日期数据,也会调用我的INSERT SQL命令,这会导致重复键SQL异常,因为在使用此语句时会调用相同的事件:

rMethod.Text = "10/10/1970"

如何使用自定义args调用 SelectedDateChanged 并能够解决正确的操作,即如果表中没有保存日期数据,则应执行INSERT,并且何时执行是,只需运行SELECT命令或用预取值填充此日期选择器?

1 个答案:

答案 0 :(得分:2)

我认为你的方向是错误的。 EventArgs不应该手动实例化,并且事件处理程序不应该手动调用。 而不是依附于SelectionChangedEventArgsDatePicker,而是将您的逻辑移动到可以处理这两种情况的方法。

例如,您可以使用一些全局标记来处理该日期。

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

当您从数据库中获取数据时,如果存在日期,请将flag设置为true,如下所示

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

稍后,在您的插入方法中,您可以检查您的标志并根据它的设置日期。

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

我希望你理解这种方法。