none
Debe haber una manera más compacta de hacer lo que explico, lo he hecho en tres líneas, pero a lo mejor se puede en una

    Pregunta

  • Quiero asignar tres elementos en blanco a una lista para asignarla a su vez a la propiedad DataSource de un control DataGridView y como resultado obtener tres filas en blanco.

    Lo hice así:

    Dim lisFilas As New List(Of claFilas)
    For nI = 1 To 3 : lisFilas.Add(New claFilas) : Next
    Tabla.DataSource = lisFilas

    Me parece que lo anterior se debe poder hacer de manera más compacta aún (en una línea de código si es posible).


    • Editado James-2016 martes, 11 de octubre de 2016 22:10
    martes, 11 de octubre de 2016 22:08

Respuestas

  • mmm, veo que Repeat es también una buena alternativa para repetir instancias, gracias.

    Hola James-2016,

    Disculpa por alargar el hilo, pero me quedé con la inquietud de que si tienes que agregar más filas (supongamos 15 filas vacías) tendrías que digitar 15 veces el New claFilas, lo cual a simple vista es incorrecto.

    - Si quieres crear 15 filas vacías.

    Tabla.DataSource = Enumerable.Range(0, 15).Select(Function(c) New claFilas).ToList

    Dónde por medio del Range genero una secuencia, a diferencia del Repeat que te daría 15 referencias pero al mismo objeto.

    Espero sirva para futuros usuarios que visiten el hilo :)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 miércoles, 12 de octubre de 2016 0:02
    martes, 11 de octubre de 2016 23:39
  • Hola James-2016,

    Podrías crear la lista directamente con los nuevos objetos del claFilas.

    Tabla.DataSource = New List(Of claFilas) From {New claFilas, New claFilas, New claFilas}

    O creando los objetos :

      Tabla.DataSource = {New claFilas, New claFilas, New claFilas}.ToList()

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    martes, 11 de octubre de 2016 22:19

Todas las respuestas

  • Hola James-2016,

    Podrías crear la lista directamente con los nuevos objetos del claFilas.

    Tabla.DataSource = New List(Of claFilas) From {New claFilas, New claFilas, New claFilas}

    O creando los objetos :

      Tabla.DataSource = {New claFilas, New claFilas, New claFilas}.ToList()

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    martes, 11 de octubre de 2016 22:19
  • Esa es, gracias.
    martes, 11 de octubre de 2016 22:24
  • ¡ah! recien vi la segunda opción, es más compacta todavía.
    martes, 11 de octubre de 2016 22:28
  • James-2016,

    Una forma mas simple es generando una secuencia de "n" instancias:

    lisFilas.AddRange(Enumerable.Repeat(New ClaFilas, 3))

    Donde 3 es el número de instancias que se repiten


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    martes, 11 de octubre de 2016 22:36
  • Estimado Willams,

    Pienso que el código que muestras podría simplificarse de esta manera :

    Tabla.DataSource = Enumerable.Repeat(New claFilas, 3).ToList

    Lo cuál genera correctamente las 3 filas. El problema es que cuando se usa el DataBoundItem para obtener el objeto de la fila.

     Dim mic As claFilas = TryCast(Tabla.CurrentRow.DataBoundItem, claFilas)

    Resultado : Al editar una fila "X", todas las filas repetidas cambian el valor.

    Por cierto James-2016, puedes omitir el .ToList() y funcionará sin problemas.

    Tabla.DataSource = {New claFilas, New claFilas, New claFilas}

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 11 de octubre de 2016 22:54
  • ah, más compacto todavía!!! gracias.
    martes, 11 de octubre de 2016 23:17
  • mmm, veo que Repeat es también una buena alternativa para repetir instancias, gracias.
    • Editado James-2016 martes, 11 de octubre de 2016 23:20
    martes, 11 de octubre de 2016 23:19
  • mmm, veo que Repeat es también una buena alternativa para repetir instancias, gracias.

    Hola James-2016,

    Disculpa por alargar el hilo, pero me quedé con la inquietud de que si tienes que agregar más filas (supongamos 15 filas vacías) tendrías que digitar 15 veces el New claFilas, lo cual a simple vista es incorrecto.

    - Si quieres crear 15 filas vacías.

    Tabla.DataSource = Enumerable.Range(0, 15).Select(Function(c) New claFilas).ToList

    Dónde por medio del Range genero una secuencia, a diferencia del Repeat que te daría 15 referencias pero al mismo objeto.

    Espero sirva para futuros usuarios que visiten el hilo :)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 miércoles, 12 de octubre de 2016 0:02
    martes, 11 de octubre de 2016 23:39
  • Efectivamente para pocas instancias está bien lo anterior, pero esa última forma generaliza la cuestión.

    Nada que disculpar, al contrario gracias por compartir lo que sabes, este foro es una maravilla.

    miércoles, 12 de octubre de 2016 0:02
  • Estimado Willams,

    Pienso que el código que muestras podría simplificarse de esta manera :

    Tabla.DataSource = Enumerable.Repeat(New claFilas, 3).ToList

    Lo cuál genera correctamente las 3 filas. El problema es que cuando se usa el DataBoundItem para obtener el objeto de la fila.


    Gracias por la observación, y efectivamente es correcto tomar el método Range() en vez de Repeat().

    miércoles, 12 de octubre de 2016 3:02