Autor
|
Tema: No encuentro evento de DataGridViewComboBoxCell (Leído 2,567 veces)
|
FJDA
Desconectado
Mensajes: 321
|
hola He creado un DataGridView dentro da algunas celdas he añadido combox (DataGridViewComboBoxCell). El caso es que necesito que al seleccionar un elemento del combo, automáticamente reciba el evento y usar el valor seleccionado para buscarlo en una tabla DataTable para luego obtener un valor: Public Sub GetValue(ByVal numCol As Integer, ByVal numRow As Integer) If numCol = 0 Then For Each N As DataRow In dt.Rows Dim Item As String = CStr(N.Item(1).ToString.Replace("*", "")) Try If DataGridView1.Item(numCol, numRow).Value.ToString.Contains(Item) Then DataGridView1.Item(5, 0).Value = N.Item(10) End If Catch ex As Exception End Try Next End If End Sub
Tengo una tabla DataTable llamada dt y con el este código la idea es añadirla en un evento el cual me devuelve la columna y la fila donde he seleccionado el elemento del combo y llamo al procedimiento getValue: GetValue(e.ColumnIndex, e.RowIndex )
Pero no consigo encontrar ningún evento que ejecute el procedimiento instantáneamente nada más hacer clic en un elemento del combo. Solo consigo que devuelva el valor cuando hago clic en otra ceda del DataGridView y abandono el combo. espero me puedan ayudar Gracias
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.788
|
Hola. Si no te he entendido mal quieres ser capaz de controlar el evento ComboBox.SelectedIndexChanged de los ComboBoxes que existan en las celdas de tu DataGridView, y obtener el número de columna y fila de la celda cada que que dicho evento se dispare. Bien, pues para ello puedes controlar el evento DataGridView.EditingControlShowing de la siguiente manera. Te muestro un ejemplo que puedas adaptar a tus necesidades: Public NotInheritable Class Form1 : Inherits Form Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown Dim column As New DataGridViewComboBoxColumn() With column .DataSource = "qwerty".ToArray() .ValueType = GetType(Char) End With Me.DataGridView1.Columns.Add(column) End Sub Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing Dim cb As ComboBox = DirectCast(e.Control, ComboBox) ' Eliminar un posible controlador de evento que haya sido agregado anteriormente, para evitar agregar varios. RemoveHandler cb.SelectedIndexChanged, AddressOf Me.ComboBox_SelectedIndexChanged ' Aasociar el nuevo controlador. AddHandler cb.SelectedIndexChanged, AddressOf Me.ComboBox_SelectedIndexChanged End Sub Private Sub ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Dim cb As ComboBox = DirectCast(sender, ComboBox) If (cb.SelectedIndex <> -1) Then Dim dgv As DataGridView = DirectCast(cb.Parent.Parent, DataGridView) Dim cell As DataGridViewCell = dgv.CurrentCell Dim colIndex As Integer = cell.ColumnIndex Dim rowIndex As Integer = cell.RowIndex Dim sb As New StringBuilder() sb.AppendLine(String.Format("Selected index changed: {0}", cb.SelectedIndex)) sb.AppendLine(String.Format("Column Index: {0}, Row Index: {1}", colIndex, rowIndex)) MessageBox.Show(sb.ToString()) End If End Sub End Class
¡Saludos!
|
|
« Última modificación: 1 Abril 2017, 01:27 am por Eleкtro »
|
En línea
|
|
|
|
FJDA
Desconectado
Mensajes: 321
|
@Elektro sois un genio muchas gracias. Funciona perfecto. Ahora tengo que usar SelectedItem debido a que el DataGridView no recoge el elemento seleccionado hasta haber abandonado la celda o haber pulsado Enter. Ese era el problema. Ahora va perfecto. ... Private Sub ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Dim cb As ComboBox = DirectCast(sender, ComboBox) If (cb.SelectedIndex <> -1) Then Dim dgv As DataGridView = DirectCast(cb.Parent.Parent, DataGridView) Dim cell As DataGridViewCell = dgv.CurrentCell Dim colIndex As Integer = cell.ColumnIndex Dim rowIndex As Integer = cell.RowIndex 'Dim sb As New System.Text.StringBuilder() 'sb.AppendLine(String.Format("Selected index changed: {0}", cb.SelectedIndex)) 'sb.AppendLine(String.Format("Column Index: {0}, Row Index: {1}", colIndex, rowIndex)) 'MessageBox.Show(sb.ToString()) MessageBox.Show(CStr(DataGridView1.Item(colIndex, rowIndex).Value)) MessageBox.Show(CStr(cb.SelectedItem)) End If End Sub
El primer mensaje aparece vacío, mientras que el segundo devuelve valor. Saludos
|
|
« Última modificación: 1 Abril 2017, 14:19 pm por FJDA »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
donde encuentro estos roms para MaMe, Teken 1 y dos, no los encuentro
Juegos y Consolas
|
warrio666999
|
0
|
3,896
|
13 Noviembre 2008, 03:05 am
por warrio666999
|
|
|
evento de un JButton
Java
|
brian_e
|
6
|
9,041
|
27 Abril 2009, 16:25 pm
por Amerikano|Cls
|
|
|
detener evento .net
« 1 2 »
.NET (C#, VB.NET, ASP)
|
Ari Slash
|
12
|
8,957
|
5 Agosto 2010, 14:30 pm
por piwi
|
|
|
Evento del JFrame
« 1 2 »
Java
|
mapers
|
13
|
14,538
|
13 Junio 2011, 09:03 am
por mapers
|
|
|
evento WMI
.NET (C#, VB.NET, ASP)
|
ipozorodri
|
1
|
1,784
|
10 Junio 2014, 15:23 pm
por El Benjo
|
|