C# 在c中将动态控件作为参数传递给用户定义的方法
我的问题很简单。我正在使用asp.net和c 在我的页面中,我有许多控件,如DropDownList、GridView、Repeater等 在某些情况下,我想将控件重置为C# 在c中将动态控件作为参数传递给用户定义的方法,c#,asp.net,dynamic-controls,C#,Asp.net,Dynamic Controls,我的问题很简单。我正在使用asp.net和c 在我的页面中,我有许多控件,如DropDownList、GridView、Repeater等 在某些情况下,我想将控件重置为 DropDownList1.DataSource = null; DropDownList1.DataBind(); 我想要的是,我想建立一个重置所有控件的通用方法,如: void SomeMethod(Template T) { T.DataSource = null; T.DataBind(); } 这
DropDownList1.DataSource = null;
DropDownList1.DataBind();
我想要的是,我想建立一个重置所有控件的通用方法,如:
void SomeMethod(Template T)
{
T.DataSource = null;
T.DataBind();
}
这里的T可以是上述任何asp控件
我听说这可以使用模板类型,但我不知道如何
因此,请建议解决方案。首先,您必须从这些类中找到公共类或接口。从我的小研究来看,它是 在此之后,如果要使用模板并为继承设置约束,请创建一个泛型方法,如下所示
void SomeMethod<T>(T dataControl) where T : DataBoundControl
{
T.DataSource = null;
T.DataBind();
}
注:
使用将仅适用于DropDownList、GridView和从中继承的其他。中继器直接从控件类继承
您可以将此方法用作一个示例
您混淆了C中泛型方法的工作原理。我认为泛型方法在这里不适用。您可以在此处了解如何以及何时使用它们: 至于您的特殊情况,似乎大多数支持数据绑定的控件都是从中派生出来的。最简单的解决方案是创建一个接受BaseDataBoundControl作为参数的方法,如下所示:
void SomeMethod(BaseDataBoundControl control)
{
control.DataSource = null;
control.DataBind();
}
我从你的问题中看到的一个例外是。因为它不是从BaseDataBoundControl继承的,所以我将实现一个重载方法,该方法接受Repeater类作为参数
void SomeMethod(Repeater control)
{
control.DataSource = null;
control.DataBind();
}
结果是两个简单的方法在代码中的其他地方具有相同的用法,无论您是对从BaseDataBoundControl派生的类型还是对Repeater类进行操作。您可以将其作为扩展方法进行操作,以便所有GridBoundControl都可以使用该方法:
internal static class ExtenstionMethods
{
internal static void ClearData( this DataBoundControl control )
{
control.DataSource = null;
control.DataBind();
}
}
你可以这样称呼它:
grdReports.ClearData();
ddlAnswers.ClearData();
etc.
回答得好+1此外,您还可以添加OP如何轻松调用此方法: