Foros del Web » Programación para mayores de 30 ;) » .NET »

Almacenar el value en un desplegable

Estas en el tema de Almacenar el value en un desplegable en el foro de .NET en Foros del Web. Saludos compañeros. Veréis, en aplicaciones Web con Asp.net 2005 a la hora de cargar la información de un dataset en un desplegable, consigo almacenar por ...
  #1 (permalink)  
Antiguo 23/05/2008, 01:22
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Exclamación Almacenar el value en un desplegable

Saludos compañeros. Veréis, en aplicaciones Web con Asp.net 2005 a la hora de cargar la información de un dataset en un desplegable, consigo almacenar por cada "item" su valor de texto, y luego en el value el ID que yo le diga, para que coincida con la Base de datos por ejemplo.

Lo hago de la siguiente forma:

Combo.DataSource = DsAnunciosCli.Tables(0)
Combo.DataTextField = "ECOfeTitulo"
Combo.DataValueField = "ECOfeId"


El problema lo tengo a la hora de hacer una apliación Windows como me pasa ahora. No consigo almacenar un id en alguan propiedad como el DataVAlueField. ¿Hay alguna forma de hacerlo??

Veréis, el objetivo es cargar en ese combo una lista de clientes. Una vez el usuario seleccione uno, si tengo almacenado el ID del cliente en cada item del combo me ahorro tener que hacer una consulta a la base de datos para averiguar el ID. ¿Me explico bien? A ver si me podéis dar alguna solución

Gracias.
  #2 (permalink)  
Antiguo 23/05/2008, 07:35
 
Fecha de Ingreso: mayo-2008
Mensajes: 24
Antigüedad: 16 años
Puntos: 1
Respuesta: Almacenar el value en un desplegable

Curiosamente tienes la respuesta justo en el post anterior a este:


comboBox1.DataSource = dataOrigen;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";
  #3 (permalink)  
Antiguo 23/05/2008, 12:45
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Almacenar el value en un desplegable

Cita:
Iniciado por jovinorh
Curiosamente tienes la respuesta justo en el post anterior a este:
Se refiere a windows forms jeje

Cita:
Iniciado por jovinorh
comboBox1.DataSource = dataOrigen;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";


Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #4 (permalink)  
Antiguo 26/05/2008, 01:08
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Muchas gracias ;)
  #5 (permalink)  
Antiguo 29/05/2008, 05:09
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Ya he solucionado eso, pero ahora me surje una pequeña variante.
Para introducir los datos en un ListBox, que es igual que el combo, pero hacerlo de uno en uno, en lugar de enlazando con un DataSet, como puedo a la hora de ir insertando items, especificarle a cada item tanto su texto, como su value. Es decir, hacer lo mismo que .DisplayMember y .ValueMember pero metiendo uno por no cada item en la lista. No se si me explico bien.
  #6 (permalink)  
Antiguo 29/05/2008, 09:46
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Almacenar el value en un desplegable

para windows app lo que puedes hacer es crear una clase que defina tu valor y texto

ejemplo:

Código:
public class ListItem
        {
            public ListItem(string value, string text)
            {
                myValue = value;
                myText = text;
            }
            private string myValue;

            public string MyValue
            {
                get { return myValue; }
                set { myValue = value; }
            }

            private string myText;

            public string MyText
            {
                get { return myText; }
                set { myText = value; }
            }
        }
Y para cargar tu combo:

Código:
            comboBox1.DisplayMember = "MyText";
            comboBox1.ValueMember = "MyValue";

            comboBox1.Items.Add(new ListItem("Valor1", "Texto 1"));
            comboBox1.Items.Add(new ListItem("Valor2", "Texto 2"));
            comboBox1.Items.Add(new ListItem("Valor3", "Texto 3"));

            MessageBox.Show("Texto = " + (comboBox1.Items[0] as ListItem).MyText);
            MessageBox.Show("Valor = " + (comboBox1.Items[0] as ListItem).MyValue);
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #7 (permalink)  
Antiguo 30/05/2008, 01:27
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Gracias compi ;) Me sirve
  #8 (permalink)  
Antiguo 30/05/2008, 02:02
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Siento molestar otra vez, pero no me termina de funcionar. Lo estoy haciendo con un ListBox y carga los elementos de la clase bien, pero no sabe sacar los datos, ya que en todos los item que muestra en la lista, pone Myclass.ListItem Vamos que reconoce los elementos, pero lo de

Lista.ValueMember = "MyValue"
Lista.DisplayMember = "MyText"

No lo debe coger bien.
¿Seguro que eso debería funcionar así????
  #9 (permalink)  
Antiguo 30/05/2008, 03:23
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Pongo mi código

Código:
Public Class ListItem

    Public myvalue As String
    Public mytext As String


    Sub New(ByVal value As String, ByVal text As String)

        myValue = value
        myText = text

    End Sub

    Public Property PropiedadValue() As Integer
        Get
            Return myvalue
        End Get
        Set(ByVal Value As Integer)
            myvalue = Value
        End Set
    End Property

    Public Property PropiedadText() As Integer
        Get
            Return mytext
        End Get
        Set(ByVal Value As Integer)
            mytext = Value
        End Set
    End Property

End Class
Y luego cuando quiero meter un item hago ésto:

Código:
iCodigo = Convert.ToInt32(NodoAux.Attributes("id").Value)
sValor = NodoAux.Attributes("descripcion").Value

Lista.Items.Add(New ListItem(iCodigo.ToString(), sValor))

Lista.ValueMember = "PropiedadValue"
Lista.DisplayMember = "PropiedadText"
  #10 (permalink)  
Antiguo 30/05/2008, 11:29
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Almacenar el value en un desplegable

Lista.ValueMember = "PropiedadValue"
Lista.DisplayMember = "PropiedadText"

tienes 2 formas (te recomiendo la primera) para colocar esos valores

1.- desde modo diseño asignale las propiedades a tu value y displaymember
2.- Coloca la asignación antes, ejemplo:

Cita:
Lista.ValueMember = "PropiedadValue"
Lista.DisplayMember = "PropiedadText"

Lista.Items.Add(New ListItem(iCodigo.ToString(), sValor))
aunque me llama la antecion que le estés enviando 2 tipos de datos "string" y tus propiedades son de tipo "Integer"

ListItem(iCodigo.ToString(), sValor))
...
Public Property PropiedadValue() As Integer
...
Public Property PropiedadText() As Integer


Por cierto:

Cita:
Public myvalue As String
Public mytext As String
no deben ser expuestas ya que son miebros de tu clase, cambialos por ésto:

Cita:
Private myvalue As String
Private mytext As String
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #11 (permalink)  
Antiguo 02/06/2008, 01:41
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Ya está compi. Me distes la pista. El único problema era que mi clase, sus propiedades devolvían un integer cuando lo que necesitaba era devolver un string. Al ponerlo ya bien, pues todo perfecto. ;)
  #12 (permalink)  
Antiguo 04/06/2008, 04:14
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Siento volver a molestar, pero me da problemas a la hora de sacar el value. Pongo mis códigos.

La clase:

Código:
Public Class ListItem

    Private myvalue As String
    Private mytext As String


    Sub New(ByVal value As String, ByVal text As String)

        myvalue = value
        mytext = text

    End Sub

    Public Property PropiedadValue() As String
        Get
            Return myvalue
        End Get
        Set(ByVal Value As String)
            myvalue = Value
        End Set
    End Property

    Public Property PropiedadText() As String
        Get
            Return mytext
        End Get
        Set(ByVal Value As String)
            mytext = Value
        End Set
    End Property


End Class
Así rellenos la ListBox

Código:
Lista.DisplayMember = "PropiedadText"
Lista.ValueMember = "PropiedadValue"

For icont = 0 To Listanodos.Count - 1

   NodoAux = Listanodos(icont)

    iCodigo = Convert.ToInt32(NodoAux.Attributes("id").Value)
    sValor = NodoAux.Attributes("descripcion").Value


  If ComprobarExistencia(iCodigo) = False Then 
                            
     Dim Elementolista As New ListItem(iCodigo.ToString(), sValor)
     Lista.Items.Add(Elementolista)

  End If

next

La lista me la rellena perféctamente con sus campos de texto perféctamente escritos. Sin embargo no ocurre lo mismo con el value. Cuando doy un botón, necesito capturar el value del elemento seleccionado de esa lista, sin embargo la propiedad SelectedValue de la lista siempre es null. Sin embargo si entro en los items depurando, veo que los elementos de la lista rellenos con objetos del tipo de clase "ListItem" están bien rellenos, tanto el texto como el value.

¿Por qué puede ser que el SelectedValue siempre sea null??????
  #13 (permalink)  
Antiguo 05/06/2008, 05:44
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Eso no funciona, porque he creado un proyectito nuevo muy simple para probar eso, y no me va. No furrula el value. A la hora de cambiar de elemento en el value, el value siempre es nothing. Podéis probarlo. Aquí dejo el código del proyectito mini de prueba


Código:
Public Class FormPrueba

    Private Sub FormPrueba_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim i As Integer
        Dim Valor As Integer = 3

        For i = 0 To 5

            Dim Ele As New Elemento(Valor.ToString(), "Elemento" + i.ToString())
            ComboBox1.Items.Add(Ele)

            Valor = Valor + 1
        Next

        ComboBox1.DisplayMember = "DarTexto"
        ComboBox1.ValueMember = "DarValor"

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        MsgBox(ComboBox1.SelectedValue)
    End Sub
End Class

Public Class Elemento

    Private T As String
    Private V As String

    Sub New(ByVal sV As String, ByVal sT As String)

        T = sT
        V = sV

    End Sub

    Public Property DarTexto() As String
        Get
            Return T
        End Get
        Set(ByVal Value As String)
            T = Value
        End Set
    End Property

    Public Property DarValor() As String
        Get
            Return V
        End Get
        Set(ByVal Value As String)
            V = Value
        End Set
    End Property


End Class
  #14 (permalink)  
Antiguo 05/06/2008, 08:37
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Almacenar el value en un desplegable

No te lo muestra porque estás llenando el combo con una clase definida, debes hacerlo de la siguiente forma:

Cita:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim myValue As String = CType(ComboBox1.SelectedItem, Elemento).DarValor
MsgBox(myValue)
End Sub
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #15 (permalink)  
Antiguo 06/06/2008, 01:50
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Almacenar el value en un desplegable

Cita:
Iniciado por RootK Ver Mensaje
No te lo muestra porque estás llenando el combo con una clase definida, debes hacerlo de la siguiente forma:



Salu2
Muchas gracias. Eres un crack ;)

Eso si, una duda. No entiendo por que la de texto si la pilla, pero la de Value no. Con lo que comentas funciona, pero me gustaría entender bien la razón para que no me vuelva a pasar.

Última edición por Javichechu; 06/06/2008 a las 02:03
  #16 (permalink)  
Antiguo 06/06/2008, 09:03
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Almacenar el value en un desplegable

Cita:
Iniciado por Javichechu
No entiendo por que la de texto si la pilla, pero la de Value no.
Porque el Text es un valor informativo donde el combo pueda solamente vivir con ese datos para mostrarlo, es por default

Pero como en éste caso dependes de un value, debes indicarle a tu control será alimentado por Items definidos por una clase, podrías asignarlo como datasource una clase con mil propiedades pero lo que le interesa al control es la propiedad que asignes como text y la que asignes como value, aunque internamente tendrás como Item toda la definicion de la clase

Espero haber sido un poco claro

Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:26.