将ASP.NET DropDownList DataTextField绑定到方法吗?

时间:2020-03-06 14:44:10  来源:igfitidea点击:

无论如何,ASP.NET DropDownList中的项目是否将其Text或者Value绑定到源上的方法而不是属性上?

解决方案

唯一的方法是处理DropDownList的Databinding事件,调用该方法并自行设置DropDownList项目中的值。

声明式地:

<asp:DropDownList ID="ddlType" runat="server" Width="250px" AppendDataBoundItems="true" DataSourceID="dsTypeList" DataTextField="Description" DataValueField="ID">
    <asp:ListItem Value="0">All Categories</asp:ListItem>
</asp:DropDownList><br />
<asp:ObjectDataSource ID="dsTypeList" runat="server" DataObjectTypeName="MyType" SelectMethod="GetList" TypeName="MyTypeManager">
</asp:ObjectDataSource>

上面的方法绑定到一个返回通用列表的方法,但是我们也可以绑定到一个返回DataReader的方法。我们也可以在代码中创建dataSource。

这是我的解决方案:

<asp:DropDownList ID="dropDownList" runat="server" DataSourceID="dataSource" DataValueField="DataValueField" DataTextField="DataTextField" />
<asp:ObjectDataSource ID="dataSource" runat="server" SelectMethod="SelectForDataSource" TypeName="CategoryDao" />

public IEnumerable<object> SelectForDataSource()
{
    return _repository.Search().Select(x => new{
        DataValueField = x.CategoryId, 
        DataTextField = x.ToString() // Here is the trick!
    }).Cast<object>();
}