2009-12-12 68 views
4

我在工具类中有类似以下的方法。我想将参数dataSource更改为接受任何类型的数据源,即DataSet,DataView,ListTarray,DataTable和ArrayList。需要用于填充ASP.NET的通用实用C#方法DropDownList

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

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); 
} 

回答

3

我相信以下是您要找的。

public void FillCombo<TSource>(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); 

} 
+1

在这种情况下使用泛型的优势是什么?是的,大卫问他们,但我想他可以自己写这些代码。它不会为接受某个对象带来任何好处。 – 2009-12-12 22:42:34

+1

我想我在这个问题的标题中读了太多的“通用”一词。我想我设法通过一个通用的解决方案进入泛型解决方案:)无论哪种方式,它的工作原理。 – 2009-12-13 00:36:20

+0

@亚当:哎呀,我还以为大卫问仿制药,但看完你的评论后,我回到它,发现可能是我错了。谢谢:) – 2009-12-13 06:20:15

8

好吧,既然DataSource财产上DropDownList的类型为object你可以改变你的方法签名接受object。这不会使你的方法是泛型的(.NET意义上的),但是反正它可能就足够了。

+0

+1之前清除下拉列表项。由于没有可用作泛型约束的所有数据源的通用接口,因此在这种情况下使用泛型没有任何优势。 – 2009-12-12 22:36:20

0

我有类似的东西在我的图书馆,和我所做的就是创建它作为DropDownList的类的扩展方法(.NET 3.5+)...

Imports WC = System.Web.Controls 

...

<Extension()> 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#。

+0

问题解决了另一个问题。 – 2009-12-12 22:39:31

+0

不是。我提到了扩展方法,但我展示了如何处理需要接受任何类型数据源的类似情况。由于DropDownList控件的.DataSource属性是Object类型,所以我将它包装到我的函数的参数列表中。 – eidylon 2009-12-14 15:46:18