为什么没有正确引发数据绑定完成事件?

时间:2016-07-12 03:39:30

标签: c# .net winforms

在Windows窗体中,我使用数据网格视图来显示一些数据。关键是只有用户从日期选择器中选择一个月后才会加载数据。

一旦加载了数据,就必须完成一些工作。在那种情况下,我实现了以下内容:

private void LoadGrid()
{
    SourceTable.DataSource = _appService.LoadGridData(datePicker.Value);

    Grid.DataBindingComplete += (sender, args) => {
        MessageBox.Show('Work to be done');
    }
}

private void ClickSearch(object sender, EventArgs e)
{
    LoadGrid();
}

方法LoadGridData只使用存储库并返回一个IList数据。

现在,当我点击按钮时,数据会被加载,但是DataBindingComplete方法没有被调用,因为没有显示消息框。

如果再次单击该按钮,则会出现两次消息框,即该方法被调用两次。如果我再次单击它,则会出现四次消息框。

这里有些不对劲。那么我做错了什么以及如何修复它以便每次加载数据时只调用一次方法?

1 个答案:

答案 0 :(得分:3)

您需要添加

Grid.DataBindingComplete += (sender, args) => {
    MessageBox.Show('Work to be done');
}

在设置DataSource之前。

您可能还想考虑之后取消注册处理程序,或者将事件的注册放在更好的位置,就像表单加载事件一样,因为此时,每次单击“搜索”时它都会添加一个新的lambda按钮。