1

我正在尝试编写一个可以在 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;
        }

结果相同。我知道我很接近,但我无法完全弄清楚。

4

2 回答 2

2

我会说这个“对象_ddl = null;” 导致问题。对象不公开 DataTextField 属性。

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

对象_ddl = null;

动态_ddl = null;

于 2012-06-15T15:59:36.000 回答
1

您的_ddl变量是对象类型,强制转换不会改变这一事实,因此即使您已强制转换ddList为 aDropDownListComboBox您只能访问基础object类的方法/属性。

基本上,您应该查找它们都继承自包含您需要使用的方法的类。这是ListControl类。

然后,您可以简单地使用:

ListControl _ddl = null; 

代替:

object _ddl = null;

或者你可以在投射时做这样的事情:

ListControl _ddl = null;
_ddl = ddList as DropDownList;
_ddl = (_ddl == null) ? ddList as ComboBox: _ddl;
if (_ddl == null) { return; }
于 2012-06-15T16:01:37.787 回答