none
Agregar combobox a un listview u opcion similar RRS feed

  • Pregunta

  •  

    Hola, tengo el siguiente problema. Estoy desarrollando un sistema de seguimiento de expedientes y para el modulo de envios de expedientes hay expedientes que ya poseen su destino y otros que no lo tienen (tal ves se preguntran porque y no lo voy a explicar solo les planteo como solucionar esto), para ello uso un listview que muestro cuales son con un checkbox para seleccionar cuales enviar.

    El problema es que yo quiero para solo aquellos que no tienen destino colocar un combobox para seleccionar el destino. Es posible esto¿? busque en la web y otros usuarios decian que no es posible.

    Ademas tengo un componente llamado Janus systems que posee un grid que es parecido a un listview es medio raro el nombre del componente pero es similar al listview y me da la opcion de colocar un combobox pero en aquellos que si tienen destino tambien lo agrega o sea en todos lo coloca(lo hace en toda la columna); y solo quiero que tenga un combobox en aquellos que no tengan destino. Se entiende¿?

     

    Es posible realizar lo que quiero hacer o me podrian recomendar otra manera.

     

    Gracias.

    Atte. Dante Tagliavini

    Analista de Sistemas

     

     

    miércoles, 26 de diciembre de 2007 12:16

Respuestas

  • Te puedo dar esta solución, tal ves no sea la mejor, pero espero te sirva.

    Suponiendo que tienes tres campos en un DataGridView,

    Expedientes (TextBoxColumn),
    Destinos(ComboBoxColumn),
    Enviar (CheckBoxColumn).

    Imágen de ejemplo



    En este caso la columna que corresponde a los Destinos serán ComboBox (todas las filas), pero puedes controlar la propiedad ReadOnly de la Celda. Si en la fila actual, la celda que corresponde a la columna destinos contiene valor entonces se cambia la propiedad ReadOnly en True para esa fila, esto hará que no se pueda cambiar el destino para el expediente, no así para los que aún no tienen destino marcado. Esto ahora rapidamente lo definí en el evente RowEnter del DataGridView (puedes hacerlo en cualquier otro evento, inclusive en el momento de rellenar la grilla con datos); aqui va el código.

    Bloque de código

    Private Sub DataGridView1_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.RowEnter


            'esta línea lo puse porque el datagridview que agregue al formulario lo cargo  

            'manualmente.

       If DataGridView1.NewRowIndex = e.RowIndex Then Exit Sub


            With DataGridView1.Rows(e.RowIndex).Cells("Destino")
                If Not String.IsNullOrEmpty(.FormattedValue.ToString) Then
                    DataGridView1.Rows(e.RowIndex).ReadOnly = True
                Else
                    DataGridView1.Rows(e.RowIndex)..ReadOnly = False
                End If
            End With
        End Sub


    Saludos.   




    Miguel Ramírez - Paraguay.
    Analista de Sistemas.

    miércoles, 26 de diciembre de 2007 13:47

Todas las respuestas

  • Hola, a ver si puedo ayudar,

     

    No en principio con el ListView no sería posible, ahora, ¿qué tan factible sería en tu diseño de pantalla tener dos listview, uno donde mostras los de un tipo y en el otro los del otro?

     

    Si te he podido ayudar, por favor no olvides de marcar la solución dada como respuesta correcta,

     

    Saludos,

     

     

    miércoles, 26 de diciembre de 2007 12:54
  • Te puedo dar esta solución, tal ves no sea la mejor, pero espero te sirva.

    Suponiendo que tienes tres campos en un DataGridView,

    Expedientes (TextBoxColumn),
    Destinos(ComboBoxColumn),
    Enviar (CheckBoxColumn).

    Imágen de ejemplo



    En este caso la columna que corresponde a los Destinos serán ComboBox (todas las filas), pero puedes controlar la propiedad ReadOnly de la Celda. Si en la fila actual, la celda que corresponde a la columna destinos contiene valor entonces se cambia la propiedad ReadOnly en True para esa fila, esto hará que no se pueda cambiar el destino para el expediente, no así para los que aún no tienen destino marcado. Esto ahora rapidamente lo definí en el evente RowEnter del DataGridView (puedes hacerlo en cualquier otro evento, inclusive en el momento de rellenar la grilla con datos); aqui va el código.

    Bloque de código

    Private Sub DataGridView1_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.RowEnter


            'esta línea lo puse porque el datagridview que agregue al formulario lo cargo  

            'manualmente.

       If DataGridView1.NewRowIndex = e.RowIndex Then Exit Sub


            With DataGridView1.Rows(e.RowIndex).Cells("Destino")
                If Not String.IsNullOrEmpty(.FormattedValue.ToString) Then
                    DataGridView1.Rows(e.RowIndex).ReadOnly = True
                Else
                    DataGridView1.Rows(e.RowIndex)..ReadOnly = False
                End If
            End With
        End Sub


    Saludos.   




    Miguel Ramírez - Paraguay.
    Analista de Sistemas.

    miércoles, 26 de diciembre de 2007 13:47