数据绑定 - 将 ASP.NET 下拉列表数据文本字段绑定到方法



无论如何,是否有任何方法可以让 ASP.NET DropDownList 中的项目将其文本或值绑定到源上的方法而不是属性?

这是我

的解决方案:

<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>();
}

下面是从类中绑定 ASP.net 下拉列表的 2 个示例

您的 aspx 页

    <asp:DropDownList ID="DropDownListJour1" runat="server">
    </asp:DropDownList>
    <br />
    <asp:DropDownList ID="DropDownListJour2" runat="server">
    </asp:DropDownList>

您的 aspx.cs 页

    protected void Page_Load(object sender, EventArgs e)
    {
    //Exemple with value different same as text (dropdown)
    DropDownListJour1.DataSource = jour.ListSameValueText();            
    DropDownListJour1.DataBind();
    //Exemple with value different of text (dropdown)
    DropDownListJour2.DataSource = jour.ListDifferentValueText();
    DropDownListJour2.DataValueField = "Key";
    DropDownListJour2.DataTextField = "Value";
    DropDownListJour2.DataBind();     
    }

您的.cs课(日.cs)

public class jour
{
    public static string[] ListSameValueText()
    {
        string[] myarray = {"a","b","c","d","e"} ;
        return myarray;
    }
    public static Dictionary<int, string> ListDifferentValueText()
    {
        var joursem2 = new Dictionary<int, string>();
        joursem2.Add(1, "Lundi");
        joursem2.Add(2, "Mardi");
        joursem2.Add(3, "Mercredi");
        joursem2.Add(4, "Jeudi");
        joursem2.Add(5, "Vendredi");
        return joursem2;
    }
}

执行此操作的唯一方法是处理 DropDownList 的数据绑定事件,调用该方法并自行设置 DropDownList 项中的值。

有时我需要将导航属性用作 DataTextField,例如 ("User.Address.Description"),因此我决定创建一个派生自 DropDownList 的简单控件。我还实现了一个 ItemDataBound 事件,它也可以提供帮助。

public class RTIDropDownList : DropDownList
{
    public delegate void ItemDataBoundDelegate( ListItem item, object dataRow );
    [Description( "ItemDataBound Event" )]
    public event ItemDataBoundDelegate ItemDataBound;
    protected override void PerformDataBinding( IEnumerable dataSource )
    {
        if ( dataSource != null )
        {
            if ( !AppendDataBoundItems )
                this.Items.Clear();
            IEnumerator e = dataSource.GetEnumerator();
            while ( e.MoveNext() )
            {
                object row = e.Current;
                var item = new ListItem( DataBinder.Eval( row, DataTextField, DataTextFormatString ).ToString(), DataBinder.Eval( row, DataValueField ).ToString() );
                this.Items.Add( item );
                if ( ItemDataBound != null ) // 
                    ItemDataBound( item, row );
            }
        }
    }
}

声明性:

<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 的方法。您还可以在代码中创建数据源。

相关内容

  • 没有找到相关文章

最新更新