我将创建一个包含数据网格的通用用户控件。我可以公开数据网格对象并分配数据源并从使用用户控件的外部访问其他属性。
CommonControl.DataGrid.Datasource = dtStudents
但是我怎样才能让其他开发人员在不更改用户控制编码的情况下从外部制作事件。然后他们可以将该控制数据网格用作普通网格。
据我所知,不可能直接公开事件,除非您“将事件转发出去”(在内部处理事件并将其提出)。
但是为什么不让开发人员明确地添加事件处理程序呢?例如
AddHandler commonCtrolInstrance.DataGrid.Click,AddressOf ClickEventHandlerMethod
并且为了让其他人将其用作普通网格,在您为 CommonControl 中为 DataGrid 创建的属性处,请记住将属性<System.ComponentModel.Browsable(True)>
另一种选择是通过从 DataGrid 继承来直接创建自定义公共控件
如果您想有选择地公开一些事件,那么您可以EventHandler
在您的用户控件中创建一个,如下所示
private DataGridCommandEventHandler _dataGridEditCommand;
public event DataGridCommandEventHandler DataGridEditCommand
{
add
{
_dataGridEditCommand += value;
}
remove
{
_dataGridEditCommand += value;
}
}
protected void dgMain_EditCommand(object source, DataGridCommandEventArgs e)
{
if (_dataGridEditCommand != null)
_dataGridEditCommand(source, e);
}
如果他们愿意,在 aspx 页面中使用用户控件的人可以将事件附加到它(如下所示)
protected void Page_Load(object sender, EventArgs e)
{
WebUserControl1.DataGridEditCommand += WebUserControl1_DataGridEditCommand;
}
void WebUserControl1_DataGridEditCommand(object source, DataGridCommandEventArgs e)
{
}