C# 调用控件事件处理程序

C# 调用控件事件处理程序,c#,.net,datagrid,event-handling,eventargs,C#,.net,Datagrid,Event Handling,Eventargs,我决定尝试DataGridView的第三方实现,特别是为了利用分层网格,即“网格中的网格”功能。虽然这一切进展得相当顺利,但我注意到我在普通DataGridView中所依赖的一些事件和属性在此实现中并不存在,因此必须找到不同的方法来实现相同的目标 一个这样的目标是,当我使用CheckBoxColumn时,用户“检查”或“取消检查”复选框,我需要在更改发生时将更改推送到网格(以及随后的数据库),否则用户将不得不点击enter或离开单元格焦点以实际提交更改。。。。有点不稳定。为了解决这个问题,我利用

我决定尝试DataGridView的第三方实现,特别是为了利用分层网格,即“网格中的网格”功能。虽然这一切进展得相当顺利,但我注意到我在普通DataGridView中所依赖的一些事件和属性在此实现中并不存在,因此必须找到不同的方法来实现相同的目标

一个这样的目标是,当我使用CheckBoxColumn时,用户“检查”或“取消检查”复选框,我需要在更改发生时将更改推送到网格(以及随后的数据库),否则用户将不得不点击enter或离开单元格焦点以实际提交更改。。。。有点不稳定。为了解决这个问题,我利用了“CurrentCellDirtyStateChanged”事件,并手动将检查或取消检查提交到网格,这反过来又触发了我的“CellValueChanged”事件:

void dataGridView_CurrentCellDirtyStateChanged(object  sender, EventArgs  e)
{       
     if ((dataGridView.IsCurrentCellDirty) & (dataGridView.CurrentCell.ColumnIndex == 0))
     {
          dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
     }
}
但是,第三方网格中不存在此事件,committedit方法也不存在此事件。为了实现相同的功能,我不得不这样做:

void GridView_ValueChanged(object sender, EventArgs  e) 
{ 

     if(sender.GetType().ToString().Contains("RadCheckBoxEditor"))
     {       
        RadCheckBoxEditor rad_chb = (RadCheckBoxEditor)sender;
        GridCheckBoxCellElement checked_a_box = (GridCheckBoxCellElement)rad_chb.OwnerElement;

        checked_a_box.Value = rad_chb.Value;

        GridViewCellEventArgs new_args = new GridViewCellEventArgs(checked_a_box.RowInfo, checked_a_box.ColumnInfo, checked_a_box.Editor);

        GridView_CellValueChanged(checked_a_box, new_args);

     }
     else
     {
         return;
     }


}

实际上,我捕获了脏值,将其分配给“CellValueChanged”处理程序可识别的类型的值,定义了自己的事件参数,并显式地调用了句柄。像这样的东西有没有潜在的气味?只是感觉不对。我注意到其他人建议创建一个独立的函数来访问共享代码,然而,这些示例似乎并不依赖于推送事件的特定事件

代码的提供者是否有常见问题解答、教程、论坛、支持系统等?如果其他用户的代码出现这种情况,他们可能会为您提供解决方案,因为他们会更熟悉控件所提供的功能。虽然您所说的是正确的,但这不是我要问的。我本质上是在问,以代码为例,控制这样的事件是否是编码失误,