(.NET) Mostrar texto en varias lineas en un DataGrid

🙂
Hola a todo el mundo!


Hoy me he encontrado con el dilema de mostrar un texto de varias líneas en una celda de un control “DataGrid” en un formulario de .NET, así que he pensado que podría hacerse con un control “Tooltip”, es decir, que al pasar por encima de la celda se muestre un texto flotante con el contenido completo…



Manos a la obra:


Para ello solo tenemos que agregar un control “ToolTip” al formulario (lo llamaremos axTip), y a continuación solo hay que agregar el siguiente código en el evento “MouseMove” del control “DataGrid”:


Private Sub DataGrid_MouseMove(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.MouseEventArgs) _
  Handles DataGrid.MouseMove
    Dim c As Integer, r As Integer, str As String
    c = Me.DataGrid.HitTest(e.X, e.Y).Column
    r = Me.DataGrid.HitTest(e.X, e.Y).Row
    If Me.DataGrid.HitTest(e.X, e.Y).Type = _
      DataGrid.HitTestType.Cell AndAlso c = 1 Then
        Dim oDs As DataSet = DataGrid.DataSource
        str = oDs.Tables(0).Rows(r)(c)
    Else
        str = “”
    End If
    Me.axTip.SetToolTip(Me.DataGrid, str)
End Sub


La verdad es que ha quedado muy sencillo, obtenemos el número de fila y el número de columna, y a continuación sólo debemos preguntar si el tipo de celda es una celda “editable” y no una cabecera o el background del control, y si estamos en la columna deseada (en nuestro caso la 1). Almacenamos el valor de la celda en una variable “String” y asignamos el contenido al “Tooltip” par nuestro “DataGrid”.


Que? Fácil verdad? La duda que me corroe es si no existirá algún método más sencillo, je, je, je…


😛
Saludos,


 

3 thoughts on “(.NET) Mostrar texto en varias lineas en un DataGrid

  1. y que pasa cuando le das click a algun encabezado del grid y reordenas los datos de este, cuando pasas el mouse sobre la columna que te interesa ya no muestra la informacion correspondiente a esa celda, si no que sigue mostrando la informacion como estaban acomodados los registros originalmente, como solucionarias eso?

  2. Encontre la forma de hacerlo:

    en la propiedad de la columna (datagridTextBoxColumn) debes ponerle

    columna.textbox.multiline=true

    y ademas debes cambiar el preferedRowHeight del estilo que aplicas al datagrid para que te muetre todas las lineas (es decir cambias el ancho de las filas del datagrid)

    No encontre la forma de que el ancho de las filas sea variable 🙁

    Abrazos

  3. Dim c As Integer, r As Integer, str As String
    c = Me.DataGrid.HitTest(e.X, e.Y).Column
    r = Me.DataGrid.HitTest(e.X, e.Y).Row
    If Me.DataGrid.HitTest(e.X, e.Y).Type = _
    DataGrid.HitTestType.Cell AndAlso c = 1 Then
    Dim oDs As DataSet = DataGrid.DataSource
    str = oDs.Tables(0).Rows(r)(c)
    Else
    str = “”
    End If
    Me.axTip.SetToolTip(Me.DataGrid, str)

Leave a Reply

Your email address will not be published. Required fields are marked *