DataGrid-ComboBox
[Poner una ComboBox en un DataGrid]
Fecha: 5 de Septiembre a las 2 (22/Sep/2003)
Autor: Fernando "NewHang" Rodriguez [email protected]
Espero que el guille no se enfade con tanta colaboracion...
Pues esto, ya veis para lo que es, Porque me lo ha preguntado una persona y nada, pos la soluci�n est� aqu�, porque yo tambi�n la he buscado por ah� y no la he encontrado (como siempre, habr� una m�s f�cil, pero bueno)
Aqui esta el c�digo:
Private Sub DG_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles DG.CurrentCellChanged If Combo.Visible = True Then Combo.Visible = False If DG.CurrentCell.ColumnNumber <> 2 Then Exit Sub Dim CeldaAlto As Integer = DG.GetCellBounds(DG.CurrentCell.RowNumber, DG.CurrentCell.ColumnNumber).Height Dim CeldaAncho As Integer = DG.GetCellBounds(DG.CurrentCell.RowNumber, DG.CurrentCell.ColumnNumber).Width Dim PosicionX As Integer = DG.GetCellBounds(DG.CurrentCell.RowNumber, DG.CurrentCell.ColumnNumber).X + DG.Left Dim PosicionY As Integer = DG.GetCellBounds(DG.CurrentCell.RowNumber, DG.CurrentCell.ColumnNumber).Y + DG.Top Combo.Left = PosicionX Combo.Top = PosicionY Combo.Height = CeldaAlto Combo.Width = CeldaAncho Combo.Visible = True Combo.DroppedDown = True End Sub Private Sub Combo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Combo.SelectedIndexChanged DG.Text = Combo.Text Combo.Visible = False End SubPara que este c�digo funcione, en el formulario ha de haber un DataGrid (si no estuviera, d�nde pondr�amos la comboBox???) y una ComboBox (si no que pondr�amos???) En este caso en particular yo he llamdo al DataGrid con el nombre DG y a la ComboBox, Combo (original...) Como veis, hace uso del m�todo GetCellBounds para obtener el alto y el ancho de una celda, pero como estamos interesados en la celda seleccionada, utilizamos las propiedades DataGrid.CurrentCell.RowNumber y DataGrid.CurrentCell.ColumNumber para especificarle al m�todo GetCellBounds a que celda nos estamos refiriendo.
Otra cosa a tener en cuenta es que el m�tedo GetCellBounds nos da todos los datos relativos al rect�ngulo que forma la celda en referencia al DataGrid. As�, la propiedad Height y Width nos da la altura y anchura de la celda, y las propiedades X e Y nos dan la posicion de la celda en referencia a los bordes del DataGrid. Esto hay que tenerlo en cuenta a la hora de situar la Combo donde nos interesa, porque la situaci�n de la Combo se refiere a los bordes del formulario... As�, las propiedades Top y Left de la la ComboBox tendran los mismos valores que las propiedades Top y Left del DataGrid, para luego sumarle los valores de posicion de la celda en referencia al DataGrid.
Por ultimo, decir que para colocar la combo hay que colocar el codigo en el evento CurrentCellChanged para que cada vez que cambiamos de celda, la posicion de la ComboBox cambie. Si os fijais, la segunda linea pone:
If DG.CurrentCell.ColumnNumber <> 2 Then Exit Sub
Esto sirve para mostrar solo la ComboBox en aquelllas columnas que nosotros queramos.
Asi, en este caso si la celda seleccionada no pertenece a la columna 2 sale del procedimiento y no muestra la combo.
Espero que os sirva de ayuda.
Fernando