Visual Basic Foro
Programación => Visual Basic .NET / C# => Mensaje iniciado por: ADONAIRAFA en Septiembre 27, 2012, 10:16:09 pm
-
Saludos a todos !!! ;D
A ver si puedo plantear bien lo que necesito hacer...
Supongamos que se tiene un DataGridView y el mismo se carga desde una Tabla 'N' con los siguientes campos:
Modelo Marca Tipo Año
-----------------------------------------------------
AAAA XXXX 1111 2010
CCCC FFFF 5555 2005
Ahora, la celda correspondiente al campo 'Modelo', al hacer click en ella, sea o se convierta en un ComboBox, y despliegue otros registros relacionados, por ejemplo los colores disponibles del modelo.
Como crearìa ese tipo de celda? y de paso, como haría la consulta para cargar dicha celda?
Quizás parezca fácil, pero resulta que no encontré el camino :-[ :-[ :'(
Agradecido para quien tenga la solución.
Manuel F. Borrego S. 8)
Venezuela.
PD: Trabajo con VB 2008.
-
si se puede, con el objeto DataGridViewComboBoxColumn, es un objeto que seria como un combobox, lo trabajas igual, tenes que crearlo, cargarle los datos que quieras y finalmente lo agregas como columna al datagridview.
por tirar un ejemplo:
Dim cmb As New DataGridViewComboBoxColumn()
cmb.Name = "MiCombo"
cmb.Items.Add("Item 1")
cmb.Items.Add("Item 2")
DataGridView1.Columns.Add(cmb)
saludos.
-
Excelente Seba !!! :o
Ya lo voy a probar...!!! Gracias !!!
Saludos !!!
-
El ejemplo funciona muy bien, ahora, como había dicho anteriormente, ¿cómo puedo hacer para que dicho ComboBox se cargue desde una Tabla de una BD?
He probado de algunas formas, y no doy con la solución (he intentado con el DataSet y con el DataTable, pero me tira errores, donde me dice que el campo no existe !!!)
Aún no hallo la solución !!!
Saludos.
-
Hola ADONAIRAFA
Aquí te dejo un par de hilos.
Opciòn uno (http://ltuttini.blogspot.com/2010/01/datagridview-parte-4-uso-del.html) la explicación la realiza con C# pero al final esta el archivo en vb.
Opciòn dos (http://www.elguille.info/colabora/2007/eduenas_datagridview_combobox_VB2005.htm) la explicación esta hecha en vb.
Espero sea lo que necesitas.
Salu2.
-
Gracias NoIO !!! Lo voy a ver. en cuanto a que esté hecho en VC# no hay problema, puedo usarlo como esté, o puedo hacer la "traducción" a VB 2008.
De todas formas buscando logré una especie de "híbrido" entre unas 3 (más o menos) soluciones posibles, entre ellas la que me mostró de seba123neo.
En breve lo publico...
Saludos !!! 8)
-
es como llenar cualquier combo, simplemente haces un select a la base de datos y llenas el combo con Items.Add..asi de simple.
saludos.
-
Bueno, sigo insistiendo con el "temita" del DataGridView conteniendo una columna de tipo ComboBox.
Lo logré mediante el uso del objeto DataGridViewComboBoxColumn, con la ayuda de de seba123neo...
Tomé como base (o idea, nada de plagios, todo el crédito es tuyo sebas !!!), una parte del ABM publicado por el mismo (seba123neo), y lo que quería lograr era presentar un DGV que mostrara 4 columnas:
PAISES CAPITALES EDO / PROVINCIAS CIUDADES
http://imageshack.us/photo/my-images/35/nro1.png/ (http://imageshack.us/photo/my-images/35/nro1.png/)
Las Columnas correspondientes a "EDO / PROVINCIAS" y "CIUDADES", son creadas y añadidas con el DataGridViewComboBoxColumn (las otras normales por supuesto ::)).
Al hacer click sobre cualquiera de las celdas correspondientes a la columna "PAISES", de inmediato se cargará la celda correspondiente en la columna "EDO / PROVINCIAS"...
http://imageshack.us/photo/my-images/202/nro2.png/ (http://imageshack.us/photo/my-images/202/nro2.png/)
A continuación se hace click en esa celda (de la columna "EDO / PROVINCIAS"), y se despliega el combobox mostrando los Estados o Provincias del País seleccionado....
http://imageshack.us/photo/my-images/203/nro3.png/ (http://imageshack.us/photo/my-images/203/nro3.png/)
Hasta ahí no ha problema. Pero cuando hago click sobre el Estado o Provincia a seleccionar: 1) no pasa nada, entonces tengo que oprimir "Enter", ahí si actúa el código correspondiente, pero me arroja el siguiente error, y allí si que no he encontrado salida !!! :-[
http://imageshack.us/a/img38/2996/nro4.png (http://imageshack.us/a/img38/2996/nro4.png)
He aquí el codigo que utilizo (gran parte tomado de "El Guille"):
Con este, cargo el DGVComboBoxColumn:
Private Sub dgvInfoStates_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInfoStates.CellClick
Dim cdx As Integer = e.ColumnIndex
Dim rdx As Integer = e.RowIndex
'//
If cdx = 0 Then
flag = True
Else
flag = False
End If
'//
If Not flag Then Exit Sub
'//
Dim sCountry As String = dgvInfoStates.CurrentCell.Value.ToString
Dim sqlCnt As String = "SELECT ID_Country, Country FROM Countries " & _
"WHERE Country = '" & sCountry & "'"
Dim schIdc As New cssSearch
Dim idC As Integer = schIdc.SearchIdCSC(sqlCnt, 0)
Dim dgvCbxCell As New DataGridViewComboBoxCell
Dim sqlSte As String = "SELECT * FROM States WHERE ID_Country = " & idC
Dim Dst As New DataSet()
Dim Dad As New FbDataAdapter(sqlSte, FbConn)
'//
Dad.Fill(Dst, "States")
With dgvCbxCell
.DataSource = Dst.Tables(0).DefaultView
.DisplayMember = "State"
.ValueMember = "ID_State"
End With
'//
dgvInfoStates.Item("EDOS. / PROVINCIAS", dgvInfoStates.CurrentCell.RowIndex) = dgvCbxCell
schIdc = Nothing
dgvCbxCell = Nothing
Dst = Nothing
Dad = Nothing
'// Dim sStates As String = dgvInfoStates.Item(cdx, rdx).Value.ToString
'// Dim sState As String = dgvInfoStates.CurrentCell.Value.ToString
End Sub
Con este configuro el DGVComboBoxColumn:
Private Sub GridStyles()
'// Aqui se dan los estilos al Grid...
'// -----------------------------------------------------------------------------------------------------------------
Dim dgvStyle As DataGridViewCellStyle = dgvInfoStates.ColumnHeadersDefaultCellStyle
'//
With dgvStyle
.Font = New Font("Tahoma", 10, FontStyle.Bold)
.BackColor = Color.Blue
.ForeColor = Color.Azure
End With
'// Se oculta la primera primera columna...
dgvInfoStates.RowHeadersVisible = False
'//
Dim sql As String = "SELECT Country AS PAISES, Capital AS Capitales FROM Countries"
Dim Dad As New FbDataAdapter(sql, FbConn)
Dim Dst As New DataSet
'//
Dad.Fill(Dst, "Country")
Dad.Fill(Dst, "Capital")
dgvInfoStates.DataSource = Dst.Tables(0).DefaultView
'//
'// Esta son dos columnas de ComboBoxes...
Dim cbxColStates As New DataGridViewComboBoxColumn
Dim cbxColCities As New DataGridViewComboBoxColumn
'//
cbxColStates.Name = "EDOS. / PROVINCIAS"
cbxColStates.FlatStyle = FlatStyle.Flat
dgvInfoStates.Columns.Add(cbxColStates)
cbxColCities.Name = "CIUDADES"
cbxColCities.FlatStyle = FlatStyle.Flat
dgvInfoStates.Columns.Add(cbxColCities)
'//
'// Configurando las Columnas...
With dgvInfoStates
.Refresh()
.Font = New Font("Arial", 11, FontStyle.Regular)
If .ColumnCount >= 0 Then
.Columns(0).Width = 200
.Columns(1).Width = 180
.Columns(2).Width = 210
.Columns(3).Width = 230
End If
End With
'//
dgvInfoStates.ClearSelection()
End Sub
Aquí es donde se origina el problema (el cual no soy capaz de entender) :'(
Private Sub dgvInfoStates_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInfoStates.CellValueChanged
Dim cdx As Integer = e.ColumnIndex
Dim rdx As Integer = e.RowIndex
Dim sCountry As String = dgvInfoStates.Item(0, rdx).Value.ToString
Dim schCnt As New cssSearch
Dim sqlCnt As String = "SELECT ID_Country, Country FROM Countries " & _
"WHERE Country = '" & sCountry & "'"
Dim idC As Integer = schCnt.SearchIdCSC(sqlCnt, 0)
Dim dgvCbcCell As New DataGridViewComboBoxCell
Dim Dst As New DataSet()
If cdx = 2 Then
Dim sState As String = dgvInfoStates.Item("CIUDADES", rdx).Value.ToString
'// Dim sqlSte As String = "SELECT * FROM States"
End If
'...
'...
'...
'...
End Sub
Con esta línea Dim sState As String = dgvInfoStates.Item("CIUDADES", rdx).Value.ToString estoy tratando de obtener el valor de la celda seleccionada en la columna "EDO / PROVINCIAS", pero simpre me tira la misma mierd...!!! >:(
Si alguien con infinita paciencia puede "guíarme a la luz" de la solución, le estaré muy agradecido !!!
Saludos a todos los que lean el Post !!! ;D
Manuel F. Borrego S. 8)