我將創建一個包含數據網格的通用用戶控件。 我可以公開數據網格對象並分配數據源,並從使用用戶控件的外部訪問其他屬性。如何公開Usercontrol Datagrid事件?
CommonControl.DataGrid.Datasource = dtStudents
但是我怎樣才能讓其他開發者在不改變用戶控制編碼的情況下讓外部事件發生。然後他們可以使用該控制數據網格作爲正常網格。
我將創建一個包含數據網格的通用用戶控件。 我可以公開數據網格對象並分配數據源,並從使用用戶控件的外部訪問其他屬性。如何公開Usercontrol Datagrid事件?
CommonControl.DataGrid.Datasource = dtStudents
但是我怎樣才能讓其他開發者在不改變用戶控制編碼的情況下讓外部事件發生。然後他們可以使用該控制數據網格作爲正常網格。
據我所知,除非您「轉發事件」(處理事件並將其提出),否則無法直接公開事件。
但爲什麼不讓開發人員明確添加事件處理程序?例如
的AddHandler commonCtrolInstrance.DataGrid.Click,AddressOf ClickEventHandlerMethod
,爲了讓別人使用它作爲一個正常的網格,在您的DataGrid中CommonControl創建的屬性,千萬記得要把屬性<System.ComponentModel.Browsable(True)>
另一種選擇是從DataGrid中
繼承如果你想選擇實驗值直接創建自定義的共同控制OSE幾個事件,那麼你可以創建用戶控制EventHandler
如下誰使用的用戶控件,在aspx頁面
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);
}
的人,可以再附加一個事件,如果他們想(如下)
protected void Page_Load(object sender, EventArgs e)
{
WebUserControl1.DataGridEditCommand += WebUserControl1_DataGridEditCommand;
}
void WebUserControl1_DataGridEditCommand(object source, DataGridCommandEventArgs e)
{
}
它的工作非常感謝。還有一件事我想澄清。在這裏我使用Telerik RadGrid。在正常的事件處理程序中,它期望e作爲Telerik.WinControls.UI.GridViewCellEventArgs,但在顯式處理程序e中爲System.EventArgs。是Telerik RadGrid –
的問題不認爲這是一個問題 - 通常所有類型的EventArgs派生自System.EventArgs,雖然您的顯式處理程序使用System.EvnetArgs作爲默認參數。如果你想確定,你可以明確地限制e作爲你想要的事件Args類型,所以你的編譯器對這種情況的警告可能會消失。 – Rex