将动态控件作为参数传递给c#中的用户定义方法
本文关键字:用户 定义 方法 动态控件 参数传递 | 更新日期: 2023-09-27 18:26:54
我的问题很直接。我正在使用带有c#的asp.net。
在我的页面中,我有许多控件,如DropDownList
、GridView
、Repeater
等。
在某些情况下,我想将控制重置为
DropDownList1.DataSource = null;
DropDownList1.DataBind();
我想要的是,我喜欢构建一个通用的Method
来重置所有控件,比如:
void SomeMethod(Template T)
{
T.DataSource = null;
T.DataBind();
}
这里,CCD_ 5可以是上述CCD_ 6中的任何一个。
我听说使用Template Type
可以做到这一点,但我不知道怎么做!!!
因此,请提出解决方案。
您混淆了泛型方法在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类进行操作。
首先,您必须从这些类中找到常见的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.