0

このようなデータベースからリストを返しています。

ClsCampus campus = new ClsCampus();
List<ClsCampus> camp = campus.GetCampusAll();
Utility.BindComboBox(ComboBoxCampus, camp, "CampusName", "CampusId");

クラス名Utillityがあり、その中で という静的メソッドを作成しましたBindComboBox

public static void BindComboBox(DropDownList listName, List<Object> list, 
    string textField, string valueField)
{
    listName.DataTextField = textField;
    listName.DataValueField = valueField;
    listName.DataSource = list;
    listName.DataBind();
}

ただし、コンパイルエラーが発生します。 では、レコードの汎用リストをコンボボックスにバインドできる汎用メソッドを作成するにはどうすればよいですか

エラー 1

The best overloaded method match for 'KenMISSchool.Repository.Utility.BindComboBox(System.Web.UI.WebControls.DropDownList, System.Collections.Generic.List<object>, string, string)' has some invalid arguments D:\Projects\KenMISSchool\Web\forms\student\registration.aspx.cs 20  9   Web
4

2 に答える 2

1

あなたは合格していますがList<ClsCampus>、メソッドは期待List<Object>しているので、一般的な方法に変更します:

public static void BindComboBox<T>(DropDownList listName, List<T> list, string textField, string valueField)
{
    listName.DataTextField = textField;
    listName.DataValueField = valueField;
    listName.DataSource = list;
    listName.DataBind();
}

次のように呼び出します。

Utility.BindComboBox<ClsCampus>(ComboBoxCampus, camp, "CampusName", "CampusId");
于 2013-02-21T12:00:08.180 に答える
0

同様のアイデアがありましたが、別の方法で解決しました。それがあなたのために働くかどうかはわかりませんが、ここに提案があります:

IDropdownable(最高の名前ではありません)と呼ばれるインターフェイスを実装しました。これにより、2つのプロパティが強制されました。

public string dropdown_value;
public string dropdown_text;

次に、ドロップダウンリストに簡単にバインドする必要があるすべてのクラスにこのインターフェイスを実装しました。

public class Foo : IDropdownable
{
    //Let's say these fields are already in the class:
    private int _id;
    private string _name;
    private DateTime _date;

    //The interface was then implemented:
    public string dropdown_value
    {
        get
        {
            return this._id.ToString();
        }
    }

    public string dropdown_text
    {
        get
        {
            return String.Format("{0} ({1})", this._name, this._date.Year);
            //Or simpler: return this._name;
        }
    }

}

残っているのは、IDropdownableパラメーターを受け取り、ドロップダウンリストを好きなように出力するジェネリック関数を作成することだけでした(HTML 、、、、string...そこSelectListList<SelectListItem>多くのオプションがあります)。

public List<SelectListItem> GenerateDDL(
                    List<IDropdownable> items, 
                    string selected_value) 
{ ... }

必要に応じて、関数の近似値を提供できます。

コメント

これはMVC2ASP.Net4で行いました。正直なところ、従来のASP.NETで返されるタイプはわかりませんが、あるタイプのリスト/配列が機能すると思います。

于 2013-02-21T12:31:44.200 に答える