En un Datagrid podemos utilizar un objeto del tipo Combo en la columna que deseemos, eso facilita el uso de los datos de la celda, ya que de esa forma no se visualiza el código sino su significado.
Para que funcione correctamente hay que enlazar varias propiedades.
Lo normal es que poseamos una tabla en la base de datos con el significado de los códigos que se graban en una tabla y se pueda cargar el contenido de la tabla en el Combo para su utilización.
Pero también podría darse el caso de que pudiera ser una enumeración.
La carga de una tabla ya se ha visto en varios ejemplos, vamos a ver el de una enumeración por lo tanto.
Public Function CargaTablaCombo() As DataTable
Dim A As Enumeracion
Dim Tabla As New DataTable
Dim Col(1) As String
Dim X As Integer
Tabla.Columns.Add("Codigo")
Tabla.Columns.Add("Denom")
For Each A In [Enumeracion].GetValues(GetType(Enumeracion))
X = A
Col(0) = Format(X, "0") ' Option strict no deja hace la asignación Col(0) = A
Col(1) = A.ToString
Next
Return Tabla
End Function
Una vez que se ha cargado la tabla podemos ejecutar el siguiente procedimiento en nuestro programa
Private Sub AnyadirCombo()
Dim ComboColum As New DataGridViewComboBoxColumn()
Tabla = CargaTablaCombo()
ComboColum.DataSource = Tabla
ComboColum.DataPropertyName = "Tipo"
ComboColum.DisplayMember = "Denom"
ComboColum.ValueMember = "Codigo"
ComboColum.HeaderText = "Tipo de servicio"
ComboColum.Name = "Tipo"
DataGrid.Columns.Insert(3, ComboColum)
End Sub
Este se encarga de colocar en la posición tres de las columnas del DataGrid
DataGrid.Columns.Insert(3, ComboColum)
El objeto que se crea en el procedimiento, hay que ver que no es un ComboBox, sino un objeto DataGridViewComboBoxColumn, pero es solo un matiz, se usan igual.
Una vez que disponemos de los dos procedimientos ya se puede ejecutar desde la configuración del DataGrid, el procedimiento de adición del Combo
La explicación es la siguiente.
Tabla = CargaTablaCombo()
Cargamos la tabla que
ComboColum.DataSource = Tabla
Vamos a enlazar al Combo.
El enlace se produce a través de
ComboColum.DataPropertyName = "Tipo"
Y el valor “Tipo” es la columna de la instrucción SQL que posee el código que deseamos se visualice como descripción en el DataGrid, en lugar de cómo valor numérico nada más.
ComboColum.DisplayMember = "Denom"
Es el campo del Objeto Tabla que se visualiza en el Combo, la tabla que hemos cargado con
Tabla = CargaTablaCombo()
Después indicamos cual es el campo de la tabla que posee el código que estamos representando en el Combo,
ComboColum.ValueMember = "Codigo"
Después damos el valor del texto que vamos a visualizar en la columna.
ComboColum.HeaderText = "Tipo de servicio"
Y el nombre del objeto que vamos añadir en el DataGrid
ComboColum.Name = "Tipo"
Por último colonos queda colocarlo en el DataGrid, bien en una posición en concreto:
DataGrid.Columns.Insert(3, ComboColum)
O bien hacer un Add
DataGrid.Columns.Add(ComboColum)
Como posiblemente tendremos columnas con valores que no es necesario visualizar, por motivos de la instrucción SQL, podemos ocultarlas.
DataGrid.Columns(5).Visible = False
Para un funcionamiento correcto del Combo en el DataGrid, es necesario que exista el siguiente evento, con o sin código según interese.
Private Sub DataGrid_DataError(ByVal sender As Object,¨_
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) _
Handles DataGrid.DataError
End Sub
Sin este evento no funcionará adecuadamente.
Síguenos en: Facebook Sobre aulaClic Política de Cookies