none
?Como puedo hacer una columna de datagrid multilinea?

    Pregunta

  • Hola a todos del foro: Necesito que una columna de un datagridview sea multilinea. Necesito ahorrar espacio y es la única forma de hacerlo. Espero puedan ayudar.

    Gracias.

     


    visual basic express
    jueves, 06 de enero de 2011 6:17

Respuestas

  • "question mark" preguntó:

    > Necesito que una columna de un datagridview sea multilinea

    Hola:

    En el evento EditingControlShowing del control DataGridView tienes que detectar el control TextBox que se "esconde" en cada celda, para establecerle las propiedades adecuadas:

        Private Sub DataGridView1_EditingControlShowing( _
            ByVal sender As Object, _
            ByVal e As DataGridViewEditingControlShowingEventArgs) _
            Handles DataGridView1.EditingControlShowing

            ' Referenciamos el control TextBox subyacente existente
            ' en la celda que actualmente está siendo editada.
            '
            Dim tb As TextBox = TryCast(e.Control, TextBox)

            ' Si se ha referenciado el control, indicamos que
            ' sea multilínea.
            '
            If (tb IsNot Nothing) Then
                tb.Multiline = True
                tb.AcceptsReturn = True
                tb.AcceptsTab = True
                tb.ScrollBars = ScrollBars.Vertical
            End If

        End Sub

    Cuando estés editanto una celda cualquiera y quieras insertar nuevas líneas, tienes que pulsar conjuntamente la tecla Mayús + Enter.

    Te advierto que cuando la celda pierda el foco, se pierde la multilínea, recuperándola cuando nuevamente la celda tome el foco, aunque podrás conocer su valor en el ToolTip que te aparecerá cuando posiciones el ratón sobre la celda.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    jueves, 06 de enero de 2011 9:31
    Moderador

Todas las respuestas

  • "question mark" preguntó:

    > Necesito que una columna de un datagridview sea multilinea

    Hola:

    En el evento EditingControlShowing del control DataGridView tienes que detectar el control TextBox que se "esconde" en cada celda, para establecerle las propiedades adecuadas:

        Private Sub DataGridView1_EditingControlShowing( _
            ByVal sender As Object, _
            ByVal e As DataGridViewEditingControlShowingEventArgs) _
            Handles DataGridView1.EditingControlShowing

            ' Referenciamos el control TextBox subyacente existente
            ' en la celda que actualmente está siendo editada.
            '
            Dim tb As TextBox = TryCast(e.Control, TextBox)

            ' Si se ha referenciado el control, indicamos que
            ' sea multilínea.
            '
            If (tb IsNot Nothing) Then
                tb.Multiline = True
                tb.AcceptsReturn = True
                tb.AcceptsTab = True
                tb.ScrollBars = ScrollBars.Vertical
            End If

        End Sub

    Cuando estés editanto una celda cualquiera y quieras insertar nuevas líneas, tienes que pulsar conjuntamente la tecla Mayús + Enter.

    Te advierto que cuando la celda pierda el foco, se pierde la multilínea, recuperándola cuando nuevamente la celda tome el foco, aunque podrás conocer su valor en el ToolTip que te aparecerá cuando posiciones el ratón sobre la celda.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    jueves, 06 de enero de 2011 9:31
    Moderador
  • Disculas Softjaén por la tardar en responder. Probé el codigo que me mostrastes y funcionó a como has dicho, pero yo que quería que se mostrase en el datagridview como multilinea dicha columna. Voy a probar de otra forma.

    Gracias.


    visual basic express
    viernes, 07 de enero de 2011 5:34
  • > codigo que me mostrastes y funcionó a como has dicho, pero yo que quería que
    > se mostrase en el datagridview como multilinea dicha columna

    Espera un momento, porque ahora que he caído en cuenta, al estilo de celda de las columnas del control DataGridView, se le puede especificar el valor DataGridViewTriState.True a su propiedad WrapMode, con lo cual el texto de la celda se ajusta en líneas sucesivas si es demasiado largo para caber en una sola línea, con lo que se consigue un efecto multilínea.

    Por ejemplo, si deseas que todas las columnas del control DataGridView sean multilínea, una vez creadas las columnas, ejecutarías lo siguiente:

            Dim cellStyle As New DataGridViewCellStyle()

            cellStyle.WrapMode = DataGridViewTriState.True

            For Each column As DataGridViewColumn In DataGridView1.Columns
                column.DefaultCellStyle = cellStyle
            Next

    Lo mismo tienes que disminuir el ancho de las columnas para que el texto de la celda aparezca en varías líneas.

    Por supuesto, de ésta manera te puedes olvidar de lo que te expliqué anteriormente para ejecutarlo en el evento EditingControlShowing.


    Enrique Martínez
      [MS MVP - VB]

    viernes, 07 de enero de 2011 14:35
    Moderador
  • > codigo que me mostrastes y funcionó a como has dicho, pero yo que quería que
    > se mostrase en el datagridview como multilinea dicha columna

    Espera un momento, porque ahora que he caído en cuenta, al estilo de celda de las columnas del control DataGridView, se le puede especificar el valor DataGridViewTriState.True a su propiedad WrapMode, con lo cual el texto de la celda se ajusta en líneas sucesivas si es demasiado largo para caber en una sola línea, con lo que se consigue un efecto multilínea.

    Por ejemplo, si deseas que todas las columnas del control DataGridView sean multilínea, una vez creadas las columnas, ejecutarías lo siguiente:

            Dim cellStyle As New DataGridViewCellStyle()

            cellStyle.WrapMode = DataGridViewTriState.True

            For Each column As DataGridViewColumn In DataGridView1.Columns
                column.DefaultCellStyle = cellStyle
            Next

    Lo mismo tienes que disminuir el ancho de las columnas para que el texto de la celda aparezca en varías líneas.

    Por supuesto, de ésta manera te puedes olvidar de lo que te expliqué anteriormente para ejecutarlo en el evento EditingControlShowing.


    Enrique Martínez
      [MS MVP - VB]

    Hola, tengo un pregunta, he puesto en marcha ambos metodos, funcionan, pero el problema que tengo es que al pulsar enter el registro cambia, es decir cambia de fila a la siguiente, y lo que necesito es que el enter afecte solo a la celda que estoy editando, como en cualquier txt multilinea, y no cambie de fila... como podre lograr esto?

    Desde ya gracias!!

    viernes, 17 de febrero de 2012 6:09