需要通用实用程序C#方法来填充ASP.NET DropDownList

我在实用程序类中有类似以下的方法。 我想更改参数dataSource以接受任何类型的数据源,即DataSet,DataView,List ,DataTable和ArrayList。

这可能吗? 我如何更改方法签名(以及参数和类型)以允许我灵活地传入任何可接受的数据源进行绑定?

public void FillCombo(DropDownList ddl, DataTable dataSource, string textField, string valueField, bool addSelect) { ddl.DataValueField = valueField; ddl.DataTextField = textField; ddl.DataSource = dataSource; ddl.DataBind(); if (addSelect) AddSelectCombo(ddl, "Select", -1); } 

我相信以下是您正在寻找的。

 public void FillCombo(DropDownList ddl, TSource dataSource, string textField, string valueField, bool addSelect) { ddl.DataValueField = valueField; ddl.DataTextField = textField; ddl.DataSource = dataSource; ddl.DataBind(); if (addSelect) AddSelectCombo(ddl, "Select", -1); } 

好吧,因为DropDownList上的DataSource属性具有类型object您可以更改方法签名以接受object 。 这不会使你的方法通用(在.NET意义上),但也许它就足够了。

我在我的库中有类似的东西,我所做的是在DropDownList类上创建它作为扩展方法(.NET 3.5+)…

 Imports WC = System.Web.Controls 

  Public Sub DataBindEx( ByVal target As WC.DropDownList, ByVal DataSource As Object, ByVal DataTextField As String, ByVal DataValueField As String, Optional ByVal SetTooltips As Boolean = True ) With target .DataSource = DataSource .DataTextField = DataTextField .DataValueField = DataValueField .DataBind() End With If SetTooltips Then For Each li As ListItem In target.Items li.Attributes("title") = li.Text Next End If End Sub 

我会留给你翻译成C#。