簡體   English   中英

在C#中將動態控制作為參數傳遞給用戶定義的方法

[英]Passing dynamic control as argument to user defined method in c#

我的問題很簡單。 我在C#中使用asp.net。

在我的頁面中,我有很多控件,例如DropDownListGridViewRepeater等。

在某些情況下,我想將控件重置為

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類派生的類型進行操作,兩個簡單方法在代碼中的其他位置都具有相同的用法。

首先,您必須從這些類中找到通用classinterface 根據我的研究,它是DataBoundControl

之后,您將創建一個通用方法(如果要使用模板),並為繼承設置一個約束,如下所示。

void SomeMethod<T>(T dataControl) where T : DataBoundControl
{
     T.DataSource = null;
     T.DataBind();
}

筆記:

  1. 使用DataBoundControl僅適用於DropDownListGridView和其他繼承自它的對象。 Repeater直接從Control類繼承。

  2. 您可以將此方法用作擴展方法

您可以將其作為擴展方法來完成,因此所有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM