将动态控件作为参数传递给c#中的用户定义方法

本文关键字:用户 定义 方法 动态控件 参数传递 | 更新日期: 2023-09-27 18:26:54

我的问题很直接。我正在使用带有c#的asp.net。

在我的页面中,我有许多控件,如DropDownListGridViewRepeater等。

在某些情况下,我想将控制重置为

DropDownList1.DataSource = null;
DropDownList1.DataBind();

我想要的是,我喜欢构建一个通用的Method来重置所有控件,比如:

void SomeMethod(Template T)
{
    T.DataSource = null;
    T.DataBind();
}

这里,CCD_ 5可以是上述CCD_ 6中的任何一个。

我听说使用Template Type可以做到这一点,但我不知道怎么做!!!

因此,请提出解决方案。

将动态控件作为参数传递给c#中的用户定义方法

您混淆了泛型方法在C#中的工作方式。我不认为通用方法适用于此。您可以在此处阅读如何(以及何时)使用它们:https://msdn.microsoft.com/en-us/library/twcad0zb.aspx

对于您的特定情况,似乎大多数支持数据绑定的控件都是从BaseDataBoundControl派生的。最简单的解决方案是创建一个接受BaseDataBoundControl作为参数的方法,如下所示:

void SomeMethod(BaseDataBoundControl control)
{
    control.DataSource = null;
    control.DataBind();
}

我从你的问题中看到的一个例外是中继器。因为它不是从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.