2008-09-25 26 views

Respuesta

0

La única manera de hacerlo es manejar el evento de enlace de datos de DropDownList, llamar al método y establecer los valores en el elemento DropDownList usted mismo.

-4

declarativa:

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

Los anteriores se une a un método que devuelve una lista genérica, pero también se puede unir a un método que devuelve un DataReader. También puede crear su fuente de datos en el código.

+1

En su ejemplo, DataTextField y DataValueField son propiedades. Necesitaba el resultado de llamar a un método en la fuente para que sea el texto o el valor. – kenstone

3

Esta es mi solución:

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

A veces tengo que usar las propiedades de navegación como DataTextField, como ("User.Address.Description"), por lo que decidieron crear un control simple que deriva de DropDownList. También implementé un evento ItemDataBound que también me puede ayudar.

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

Aquí hay 2 ejemplos para la unión de un desplegable en ASP.net de una clase

Su página aspx

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

Su página 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();  
    } 

Su jour. Clase 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; 
    } 
} 
+0

Muy útil, una de las pocas respuestas que pude encontrar que muestran cómo configurar DataTextField y DataValueField –

Cuestiones relacionadas