如何使用一种方法填充DropDownList或AJAX ComboBox

时间:2012-06-15 15:44:57

标签: c# drop-down-menu combobox polymorphism

我正在尝试编写一个可以在C#中填充DropDownList或AJAX ComboBox(而不是两个单独的,几乎相同的方法)的方法。我将方法传递给查询字符串,文本字段的名称以及值字段的名称以及下拉对象。这是我到目前为止所做的:

public static void BindDropDown(string selectCmd, string textField, string valueField, object ddList)
//Populate dropdown list (DropDownList or ComboBox)
{
    // var for dropdown object
    object _ddl = null;

    // Get type of dropdown
    if (ddList.GetType() == typeof(DropDownList))
    {
        _ddl = (DropDownList)ddList;
    }
    else if (ddList.GetType() == typeof(ComboBox))
    {
        _ddl = (ComboBox)ddList;
    }

    // Setup DB connection
    SqlConnection dbConn = new SqlConnection(LTConnStr);
    SqlCommand myCmd = new SqlCommand(selectCmd, dbConn);

    //Set dropdown list params
    _ddl.DataTextField = textField;
    _ddl.DataValueField = valueField;

    try
    {
        dbConn.Open();
        _ddl.DataSource = myCmd.ExecuteReader();
        _ddl.DataBind();
    }
    finally
    {
        dbConn.Close();
    }
} //end method BindDropDown

但我收到错误“'object'不包含'DataTextField'的定义......”。我也尝试过“is”语法:

        // Get type of dropdown
        if (ddList is DropDownList)
        {
            _ddl = (DropDownList)ddList;
        }
        else if (ddList is ComboBox)
        {
            _ddl = (ComboBox)ddList;
        }

具有相同的结果。我知道我很亲密,但我无法弄明白。

2 个答案:

答案 0 :(得分:2)

我会说这个“对象_ddl = null;”造成了这个问题。 Object不公开DataTextField属性。

如果您使用的是.net 4,则可以更改:

object _ddl = null;

dynamic _ddl = null;

答案 1 :(得分:1)

您的_ddl变量属于object类型,演员不会改变这一事实,所以即使您将ddList投射到DropDownList或{{1}之后也是如此您只能访问基础ComboBox类的方法/属性。

基本上你应该寻找他们都继承的类,其中包含你需要使用的方法。这是ListControl类。

然后您可以使用:

object

取代:

ListControl _ddl = null; 

或者你可以在施法时做这样的事情:

object _ddl = null;