[英]Passing dynamic control as argument to user defined method in c#
我的問題很簡單。 我在C#中使用asp.net。
在我的頁面中,我有很多控件,例如DropDownList
, GridView
, Repeater
等。
在某些情況下,我想將控件重置為
DropDownList1.DataSource = null;
DropDownList1.DataBind();
我想要的是,我喜歡建立一個通用的Method
來重置所有控件,例如:
void SomeMethod(Template T)
{
T.DataSource = null;
T.DataBind();
}
這里的T
可以是任何上述asp controls
。
我聽說可以使用Template Type
來實現,但是我不知道如何!
因此,請提出解決方案。
您對通用方法在C#中的工作方式感到困惑。 我認為通用方法不適用於這里。 您可以在此處閱讀如何(以及何時)使用它們: https : //msdn.microsoft.com/en-us/library/twcad0zb.aspx
對於您的特定情況,似乎大多數支持數據綁定的控件都是從BaseDataBoundControl派生的。 最簡單的解決方案是創建一個接受BaseDataBoundControl作為參數的方法,如下所示:
void SomeMethod(BaseDataBoundControl control)
{
control.DataSource = null;
control.DataBind();
}
我從您的問題中看到的一個例外是Repeater 。 因為它不繼承自BaseDataBoundControl,所以我實現了一個重載方法,該方法接受Repeater類作為參數。
void SomeMethod(Repeater control)
{
control.DataSource = null;
control.DataBind();
}
結果是,無論您是對從BaseDataBoundControl還是Repeater類派生的類型進行操作,兩個簡單方法在代碼中的其他位置都具有相同的用法。
首先,您必須從這些類中找到通用class
或interface
。 根據我的研究,它是DataBoundControl
。
之后,您將創建一個通用方法(如果要使用模板),並為繼承設置一個約束,如下所示。
void SomeMethod<T>(T dataControl) where T : DataBoundControl
{
T.DataSource = null;
T.DataBind();
}
筆記:
使用DataBoundControl
僅適用於DropDownList
, GridView
和其他繼承自它的對象。 Repeater
直接從Control
類繼承。
您可以將此方法用作擴展方法 。
您可以將其作為擴展方法來完成,因此所有GridBoundControls都可以使用該方法:
internal static class ExtenstionMethods
{
internal static void ClearData( this DataBoundControl control )
{
control.DataSource = null;
control.DataBind();
}
}
然后可以這樣稱呼它:
grdReports.ClearData();
ddlAnswers.ClearData();
etc.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.