我将创建一个包含数据网格的通用用户控件。 我可以将数据网格对象公开,并从外部使用用户控制来分配数据源和访问其他属性。
CommonControl.DataGrid.Datasource = dtStudents
但是我怎样才能让其他开发人员在不改变用户控制编码的情况下从外部制作事件。然后他们可以将控制数据网格用作普通网格。
答案 0 :(得分:1)
据我所知,不可能直接公开事件,除非你“将事件转发出去”(处理事件并将其提出)。
但为什么不让开发人员只是显式添加事件处理程序?例如
AddHandler commonCtrolInstrance.DataGrid.Click,AddressOf ClickEventHandlerMethod
并且为了让其他人将其用作普通网格,在您为CommonControl中的DataGrid创建的属性中,请记住放置属性<System.ComponentModel.Browsable(True)>
另一种选择是通过继承DataGrid
直接创建自定义公共控件答案 1 :(得分:1)
如果您想有选择地公开一些事件,那么您可以在用户控件中创建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)
{
}