none
System.Collections.Generic.Dictionary(Of Integer, String) con comportamiento diferente RRS feed

  • Pregunta

  • Hola amigos:

    Un verdadero problema: Tengo 2 aplicaciones en VB.Net 2012 y en una, he diseñado un combobox en un datagridview y lo cargo con un dictionary de esta forma:

    with Dgv
         Dim valores As New System.Collections.Generic.Dictionary(Of Integer, String)
                valores.Add(0, "Sin asignar")
                valores.Add(1, "Logotipo")
                valores.Add(2, "Código de barra")
                valores.Add(3, "Código de texto")
                valores.Add(4, "Precio")
                valores.Add(5, "Fecha precio")
                valores.Add(6, "Detalle")
                valores.Add(7, "Talle")
                valores.Add(8, "Color")
                valores.Add(9, "Etiqueta")
                valores.Add(10, "Texto general")
                valores.Add(11, "Texto en barra")
                TryCast(.Columns(6), DataGridViewComboBoxColumn).DataSource = valores.ToArray
                TryCast(.Columns(6), DataGridViewComboBoxColumn).ValueMember = "Key"
                TryCast(.Columns(6), DataGridViewComboBoxColumn).DisplayMember = "Value"
    
    ....y sigue la programación
    
    
    
    Esta aplicación funciona perfectamente, por lo que copié y pegué (para qué experimentar escribiendo si se puede copiar), para utilizar la misma estructura en otra aplicación.
    
    Ahora viene el problema: El siguiente código, es el que se encuentra en la aplicación destino:
    
    With Dgv
                Dim Valores As New System.Collections.Generic.Dictionary(Of Integer, String)
                Valores.Add(0, "Sin asignar")
                valores.Add(1, "Material")
                valores.Add(2, "Acumulado %")
                valores.Add(3, "Puntual %")
                Valores.Add(4, "Item gral.")
    
                TryCast(.Columns(0), DataGridViewComboBoxColumn).DataSource = Valores.toarray
                TryCast(.Columns(0), DataGridViewComboBoxColumn).ValueMember = "Key"
                TryCast(.Columns(0), DataGridViewComboBoxColumn).DisplayMember = "Value"
    
    ...y sigue la programación


    En esta 2da aplicación, NO permite la opción de ToArray en el diccionario. No sé por cual razón tienen un comportamiento diferente, cuando se encuentran declaradas de la misma manera, y en ambas estoy utilizando frameworks 4.5.

    Alguna ayuda que me permita resolver esta diferencia que no encuentro dónde se origina.

    Gracias de antemano.


    Juan Carlos

    • Cambiado Sergio Parra martes, 12 de marzo de 2019 7:44 Es VB
    martes, 12 de marzo de 2019 2:29

Respuestas

Todas las respuestas

  • Hola Juan Carlos Valero:

    DataSource = valores.ToArray
    DataSource = Valores.toarray

    No será que no es toarray sino ToArray.

    Si no es error de sintaxis, que significa No me permite

    ¿Que error/información explicito te muestra?

    martes, 12 de marzo de 2019 6:03
  • ToArray es un extensor de LINQ. Mira a ver si lo que pasa es que en la primera aplicación tienes un Imports System.Linq y en la segunda no lo tienes.
    martes, 12 de marzo de 2019 7:28
  • Muchas gracias Alberto. Efectivamente, dentro de toda la maraña de líneas de programación, faltaba importas el system.Linq.

    Muchísimas gracias por tu aporte.

    Saludos


    Juan Carlos

    martes, 12 de marzo de 2019 11:48