Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么未正确引发数据绑定完成事件?_C#_.net_Winforms - Fatal编程技术网

C# 为什么未正确引发数据绑定完成事件?

C# 为什么未正确引发数据绑定完成事件?,c#,.net,winforms,C#,.net,Winforms,在Windows窗体中,我使用数据网格视图来显示一些数据。关键是,只有当用户从日期选择器中选择一个月时,才会加载数据 不过,一旦加载了数据,就必须做一些工作。在这种情况下,我实现了以下功能: private void LoadGrid() { SourceTable.DataSource = _appService.LoadGridData(datePicker.Value); Grid.DataBindingComplete += (sender, args) => {

在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
方法,因为没有显示消息框

如果我再次单击该按钮,消息框将出现两次,也就是说,该方法将被调用两次。如果我再次单击它,消息框将显示四次

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

您需要添加

Grid.DataBindingComplete += (sender, args) => {
    MessageBox.Show('Work to be done');
}
在设置数据源之前


您可能还想考虑事后取消处理程序,或者将事件的注册放在表单加载事件中的更好位置,因为在每次单击搜索按钮时,它将添加一个新的lambda。事件未触发的唯一原因是,

DataBindingComplete
的订阅服务器为空,但在第二次单击时情况并非如此。与其删除并再次添加它,最好在
InitializeComponent
之后将注册码放入构造函数中,或者使用属性网格的“事件”选项卡使用设计器手动附加事件处理程序。