none
Llenar Combobox con las filas de un Datagridview

    Pregunta

  •  

    Hola amigos, Tengo un Datagridview(Dgv) que lo lleno desde codigo por medio de varios  textbox(10), ¿Como puedo llenar un combo con las filas de un Dgv  pero que unicamente las que tenga visibles  , me explico:  si se  deja  un textbox  vacio, que automaticamente  se oculte la fila y  solo se carguen las filas ingresadas. Ejemplo si se ingresa en el txt.1.Text = "Uno" y en el txt.2.Text = "Dos" y los restantes 8 quedan vacios, solo deben de aparecer, tanto en el Dgv como en el combo los que fueron digitados

    Nota:  Es una aplicacion para primaria en donde el escolar debera ingresar y/o editar (si no los ingreso)  los numerros del 1 al 10 en forma escrita.

    Mi codigo implementado:

    'Metodo para llenar el datagridview
     Dim tb As New DataTable("Tabla")
            tb .Columns.Add("Numeros", Type.GetType("System.String"))
            tb .Rows.Add(txt_1.Text )
            tb .Rows.Add(txt_2.Text )
            tb .Rows.Add(txt_3.Text )
            tb .Rows.Add(txt_4.Text )
            tb .Rows.Add(txt_5.Text )
            tb .Rows.Add(txt_6.Text )
     	tb .Rows.Add(txt_7.Text )
     	tb .Rows.Add(txt_8.Text )
     	tb .Rows.Add(txt_9.Text )
     	tb .Rows.Add(txt_10.Text)
            Form_Lista.dgv_ListaNumeros.DataSource = table
    
    'Metodo para Llenar el combo
      Sub llenar_ComboNumeros()
            For i As Integer = 0 To dgv_ListaNumeros.Rows.Count - 1
                combo_Numeros.Items.Add(dgv_ListaNumeros.Rows(i).Cells(0).Value)
            Next
        End Sub


    Saludos.

    • Editado Jose Alrey miércoles, 9 de noviembre de 2016 5:39
    miércoles, 9 de noviembre de 2016 5:33

Respuestas

  • Hola Jose Alrey,

    [-] ... solo deben de aparecer, tanto en el Dgv como en el combo los que fueron digitados..

    Pero entonces porque creas una fila por cada textBox ? Tendrías que crearlo dependiendo del contenido.

    Algo como :

        Public Sub cargarDatos()
            combo_Numeros.Items.Clear()
    
            Dim tb As New DataTable
            tb.Columns.Add("Numeros", Type.GetType("System.String"))
    
            For Each txt As TextBox In Me.Controls.OfType(Of TextBox).
                      OrderBy(Function(x) CInt(x.Name.Replace("txt_", String.Empty)))
                If txt.Text.Trim() <> String.Empty Then
                    tb.Rows.Add(txt.Text)
                    combo_Numeros.Items.Add(txt.Text)
                End If
            Next
    
            dgv_ListaNumeros.DataSource = tb
        End Sub

    Teniendo como resultado :

    No es eso lo que deseas ?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 9 de noviembre de 2016 19:45

Todas las respuestas

  • Con una linea:

    Me.Controls.OfType(Of TextBox).Where(Function(t) t.Text.Trim().Length > 0) _
            .OrderBy(Function(t) t.Name).ToList().ForEach(Function(t) tb.Rows.Add(t.Text))

    miércoles, 9 de noviembre de 2016 10:34
  • Hola Jose Alrey,

    [-] ... solo deben de aparecer, tanto en el Dgv como en el combo los que fueron digitados..

    Pero entonces porque creas una fila por cada textBox ? Tendrías que crearlo dependiendo del contenido.

    Algo como :

        Public Sub cargarDatos()
            combo_Numeros.Items.Clear()
    
            Dim tb As New DataTable
            tb.Columns.Add("Numeros", Type.GetType("System.String"))
    
            For Each txt As TextBox In Me.Controls.OfType(Of TextBox).
                      OrderBy(Function(x) CInt(x.Name.Replace("txt_", String.Empty)))
                If txt.Text.Trim() <> String.Empty Then
                    tb.Rows.Add(txt.Text)
                    combo_Numeros.Items.Add(txt.Text)
                End If
            Next
    
            dgv_ListaNumeros.DataSource = tb
        End Sub

    Teniendo como resultado :

    No es eso lo que deseas ?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 9 de noviembre de 2016 19:45
  • Hola Joel,  efectivamente de la manera que describes es funcional, muchas gracias por tu respuesta maestro.

    jueves, 10 de noviembre de 2016 0:32