Associate an ASP.NET DropDownList DataTextField with a Method?

Are there anyway the elements in ASP.NET DropDownList have either their text or value attached to the source method and not to the property?

+6
drop-down-menu data-binding
source share
5 answers

The only way to do this is to handle the Databinding event in the DropDownList, call the method, and set the values ​​in the DropDownList element yourself.

0
source share

This is my decision:

<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>(); } 
+3
source share

Here are two examples for binding an ASP.net dropdown from a class

Your aspx page

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

Your aspx.cs page

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

Your class jour.cs (jour.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; } } 
+1
source share

Sometimes I need to use Navigation Properties like a DataTextField, for example ("User.Address.Description"), so I decided to create a simple control that comes from DropDownList. I also implemented an EventDataBound Event, which may also help.

 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 ); } } } } 
0
source share

Declaratively:

 <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> 

The above is associated with a method that returns a generic list, but you can also bind a method that returns a DataReader. You can also create your own data source in code.

-4
source share

All Articles