对象的 C# DDL 数据源列表。如何将 DataTextField 设置为对象的 toString()?
C# DDL Datasource list of object. How to set DataTextField to the object's toString()?
MyDropDownList.DataSource = myList;
MyDropDownList.DataTextField="Name";
MyDropDownList.DataValueField="ID";
MyDropDownList.DataBind();
这就是我将对象列表绑定到下拉列表的方式。我的问题是如何将 DataTextField 设置为对象的 ToString() 方法。
ToString() 会 return ID + " " + Name
我试过了
MyDropDownList.DataTextField="ToString()";
和
MyDropDownList.DataTextField="ToString";
但是,DataTextField 需要一个 属性 名称,而不是方法名称。
我该怎么做?
最正确的选择是将 属性 添加到您放入列表中的对象。它可以通过表达式来定义。例如:
public class MyListItem
{
//some code ID, Name properties and so on
public string Description => ToString();
public override string ToString()
{
return $"{ID} {Name}";
}
}
如果这不可能 - 您可以创建一个继承对象或包装对象,它们提供对 ToString
如何字段的方法的访问。
然后您可以在 DropDownList 中设置此 属性,例如:
MyDropDownList.DataTextField = "Description";
更新
还有第三种选择——你可以创建匿名对象 insted object-wrapper
MyDropDownList.DataSource = myList;
MyDropDownList.DataTextField="Name";
MyDropDownList.DataValueField="ID";
MyDropDownList.DataBind();
这就是我将对象列表绑定到下拉列表的方式。我的问题是如何将 DataTextField 设置为对象的 ToString() 方法。
ToString() 会 return ID + " " + Name
我试过了
MyDropDownList.DataTextField="ToString()";
和
MyDropDownList.DataTextField="ToString";
但是,DataTextField 需要一个 属性 名称,而不是方法名称。
我该怎么做?
最正确的选择是将 属性 添加到您放入列表中的对象。它可以通过表达式来定义。例如:
public class MyListItem
{
//some code ID, Name properties and so on
public string Description => ToString();
public override string ToString()
{
return $"{ID} {Name}";
}
}
如果这不可能 - 您可以创建一个继承对象或包装对象,它们提供对 ToString
如何字段的方法的访问。
然后您可以在 DropDownList 中设置此 属性,例如:
MyDropDownList.DataTextField = "Description";
更新
还有第三种选择——你可以创建匿名对象 insted object-wrapper