1

私は、C#でDropDownListまたはAJAX ComboBoxのいずれかを(2つの別個の、ほぼ同一のメソッドを持つ代わりに)設定できる単一のメソッドを作成しようとしています。ドロップダウンオブジェクトとともに、クエリ文字列、テキストフィールドの名前、値フィールドの名前をメソッドに渡します。これが私がこれまでに持っているものです:

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

この「object_ddl=null;」と言えます。問題を引き起こしています。オブジェクトはDataTextFieldプロパティを公開しません。

.net 4を使用している場合は、以下を変更できます。

オブジェクト_ddl=null;

動的_ddl=null;

于 2012-06-15T15:59:36.000 に答える
1

変数はオブジェクト型であり、キャストはその事実を変更しませ_ddlん。したがって、にキャストddListした後でも、DropDownListまたは基礎となるクラスComboBoxのメソッド/プロパティにしかアクセスできない場合でも。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 に答える