sábado, 31 de enero de 2015 – #Developer

Mi colega @Rubén me escribió hace un momento por que tenía una duda respecto a cargar información en un control DataGridView (está trabajando en una aplicación WinForms). Para poder brindarle respuesta a su duda, he decidido crear una aplicación TODO (to do=”cosas por hacer”). Sin más, les comparto de que se trata.

Manos a la obra

Voy a crear una aplicación que me permita ir agregando tareas que tengo pendientes, y que cuando las haya cumplido pueda marcarlas como Finalizadas. Cuando una tarea esté pendiente me aparecerá una imagen de Advertencia, mientras que cuando ya esté finalizada me aparecerá una imagen de una “palomita” (o check). Además, podré eliminar las tareas finalizadas.

Nota: En esta aplicación no se guardarán las tareas en una base de datos o archivo. Solo estarán disponibles mientras la aplicación esté en ejecución.

En Visual Studio he creado un formulario (llamado frmMain) similar al siguiente:
TODOapp1

En él, incluí los siguientes controles:

  • Un DataGridView con el nombre dgvTODO
  • Un Button con el nombre btnNuevaTarea

El código que está detrás quedó de la siguiente manera:

Public Class frmMain

  Dim imagenPendiente As Image
  Dim imagenListo As Image

  Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Try
      'Cargamos las imágenes
      imagenPendiente = Image.FromFile("Pendiente.png")
      imagenListo = Image.FromFile("Listo.png")
    Catch ex As Exception

    End Try

  End Sub
  Private Sub btnNuevaTarea_Click(sender As Object, e As EventArgs) Handles btnNuevaTarea.Click

    Try
      Dim Descripcion As String

      Descripcion = InputBox("¿Cuál es la descripción para la nueva tarea?", "Nueva tarea")
      If Not Descripcion Is String.Empty Then
        'Aqui agregamos una tarea
        'le definimos la imagen Pendiente
        'la descripción que se ingresó
        'y al botón se le asigna el texto Finalizar
        dgvTODO.Rows.Add({imagenPendiente, Descripcion, "Finalizar"})
      End If

    Catch ex As Exception

    End Try

  End Sub

  Private Sub dgvTODO_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvTODO.CellContentClick

    Try
      'Revisamos si se hizo clic en el botón
      If e.ColumnIndex = 2 Then
        If dgvTODO.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "Finalizar" Then
          'Si el botón tiene el texto de Finalizar
          'se actualiza la imagen de la tarea
          'y se cambia el texto del botón a Eliminar
          dgvTODO.Rows(e.RowIndex).Cells(0).Value = imagenListo
          dgvTODO.Rows(e.RowIndex).Cells(2).Value = "Eliminar"
        ElseIf dgvTODO.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = "Eliminar" Then
          'Si el botón tiene el texto Eliminar
          'se elimina la fila
          dgvTODO.Rows.Remove(dgvTODO.Rows(e.RowIndex))
        End If
      End If
    Catch ex As Exception

    End Try

  End Sub
End Class


Y cuando ejecutamos la aplicación se ve así:
TODOapp2

Actualización

Para que la imagen de la “palomita” y de la advertencia se muestren correctamente en el DataGridView, debe definirse el tipo de columna en DataGridViewImageColumn. De la misma manera, si queremos que se muestre un botón en una columna se debe definir su tipo en DataGridViewButtonColumn
TODOapp3

Descarga el código de esta aplicación desde Microsoft Developer Network



¿Este artículo fue de utilidad?

Si tu respuesta es SÍ puedes hacermelo saber con un Gracias e incluso lo puedes compartir a tus seguidores a través de un Tweet.

Opcionalmente puedes realizar un donativo para comprar más café con la finalidad de mantenerme despierto y seguir escribiendo más artículos.