绑定数据文本字段,数据值字段到asp:Dropdownlist
本文关键字:字段 数据 asp Dropdownlist 文本 绑定 | 更新日期: 2023-09-27 18:26:04
我已经创建了一个助手函数来绑定asp.net中的下拉列表。查看我的功能:
public void BindDDL(string query, DropDownList DDL)
{
List<Issuetype> obj = new List<Issuetype>();
Issuetype iss = new Issuetype();
iss.DeptId = 1;
iss.Issue = "SSS";
iss.IssuetypeId = 4;
obj.Add(iss);
//BALissue Bl = new BALissue();
//List<Issuetype> objSource = null;
//objSource = Bl.Bind_issuetypes(query);
DDL.DataSource = obj;
DDL.DataValueField = Convert.ToString(obj[0]);
DDL.DataTextField = Convert.ToString(obj[1]);
DDL.DataBind();
}
通过这种方式,如果我将查询名称和Dropdownlist id发送到函数,下拉列表应该由Issuetype实体的List绑定,你可以在代码中看到Issuetype的属性。
但是我不能正确设置DataValueField和DataTextField。每次它都说索引超出范围。
DataValueField
和DataTextField
应该是集合中字段的名称,而不是集合中的值。
DDL.DataSource = obj;
DDL.DataValueField = "Issue"; //example choose what is needed
DDL.DataTextField = "IssuetypeId"; //example choose what is needed
DDL.DataBind();
引发异常是因为在您的集合中有1个项,但您试图将第二个项(不存在)放在DataTextField
中。但是,如果您修复了代码,这就不相关了。
您需要指定键和值字段。在您的情况下,您正在向列表中添加一个项目,但在尝试指定值Convert.ToString(obj[1])
时,试图访问第二个(不存在的)项目。
你可能想要的是:
DDL.DataValueField = "IssuetypeId";
DDL.DataTextField = "Issue";
实际上,您的代码中没有obj[1]
,因为obj
列表中只有一个项目,所以在
DDL.DataTextField = Convert.ToString(obj[1]);
这一行你会得到异常
相反,你可以使用
DDL.DataValueField = "Issue";
DDL.DataTextField = "IssuetypeId";
要获取属性名称,请使用Reflection
using System.Reflection; // reflection namespace
// get all public static properties of MyClass type
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public | BindingFlags.Static);
// sort properties by name
Array.Sort(propertyInfos,
delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
{ return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });
// write property names
foreach (PropertyInfo propertyInfo in propertyInfos)
{
Console.WriteLine(propertyInfo.Name);
}