我从这样的数据库中返回一个列表;
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
答案 0 :(得分: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");
答案 1 :(得分: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
,{{1} },...那里有很多选项。)
List<SelectListItem>
如果你愿意,我可以给你一个函数的近似值。
<强>注释强>
我们在MVC2 ASP.Net 4中做到了这一点。老实说,我不确定在经典ASP.NET中应该返回什么类型,但我假设某种类型的List / Array可以工作。