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 的接口(我知道这不是最好的名字),它强制了两个属性:

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, SelectList, List<SelectListItem>, ... 那里有很多选项)。

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

如果你愿意,我可以给你一个函数的近似值。

评论

我们在 MVC2 ASP.Net 4 中做到了这一点。老实说,我不确定在经典 ASP.NET 中应该返回什么类型,但我假设某种类型的 List/Array 会起作用。

于 2013-02-21T12:31:44.200 回答