elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  No encuentro evento de DataGridViewComboBoxCell
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No encuentro evento de DataGridViewComboBoxCell  (Leído 965 veces)
FJDA

Desconectado Desconectado

Mensajes: 193


Ver Perfil
No encuentro evento de DataGridViewComboBoxCell
« en: 31 Marzo 2017, 20:06 »

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:

Código
  1.    Public Sub GetValue(ByVal numCol As Integer, ByVal numRow As Integer)
  2.        If numCol = 0 Then
  3.            For Each N As DataRow In dt.Rows
  4.                Dim Item As String = CStr(N.Item(1).ToString.Replace("*", ""))
  5.                Try
  6.                    If DataGridView1.Item(numCol, numRow).Value.ToString.Contains(Item) Then
  7.                        DataGridView1.Item(5, 0).Value = N.Item(10)
  8.                    End If
  9.                Catch ex As Exception
  10.  
  11.                End Try
  12.  
  13.            Next
  14.        End If
  15.    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:
Código
  1. 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 Desconectado

Mensajes: 9.709



Ver Perfil
Re: No encuentro evento de DataGridViewComboBoxCell
« Respuesta #1 en: 1 Abril 2017, 01:22 »

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:

Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  4.  
  5.        Dim column As New DataGridViewComboBoxColumn()
  6.        With column
  7.            .DataSource = "qwerty".ToArray()
  8.            .ValueType = GetType(Char)
  9.        End With
  10.  
  11.        Me.DataGridView1.Columns.Add(column)
  12.  
  13.    End Sub
  14.  
  15.    Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) _
  16.    Handles DataGridView1.EditingControlShowing
  17.  
  18.        Dim cb As ComboBox = DirectCast(e.Control, ComboBox)
  19.        ' Eliminar un posible controlador de evento que haya sido agregado anteriormente, para evitar agregar varios.
  20.        RemoveHandler cb.SelectedIndexChanged, AddressOf Me.ComboBox_SelectedIndexChanged
  21.        ' Aasociar el nuevo controlador.
  22.        AddHandler cb.SelectedIndexChanged, AddressOf Me.ComboBox_SelectedIndexChanged
  23.  
  24.    End Sub
  25.  
  26.    Private Sub ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs)
  27.  
  28.        Dim cb As ComboBox = DirectCast(sender, ComboBox)
  29.  
  30.        If (cb.SelectedIndex <> -1) Then
  31.            Dim dgv As DataGridView = DirectCast(cb.Parent.Parent, DataGridView)
  32.            Dim cell As DataGridViewCell = dgv.CurrentCell
  33.            Dim colIndex As Integer = cell.ColumnIndex
  34.            Dim rowIndex As Integer = cell.RowIndex
  35.  
  36.            Dim sb As New StringBuilder()
  37.            sb.AppendLine(String.Format("Selected index changed: {0}", cb.SelectedIndex))
  38.            sb.AppendLine(String.Format("Column Index: {0}, Row Index: {1}", colIndex, rowIndex))
  39.            MessageBox.Show(sb.ToString())
  40.        End If
  41.  
  42.    End Sub
  43.  
  44. End Class

¡Saludos!


« Última modificación: 1 Abril 2017, 01:27 por Eleкtro » En línea


FJDA

Desconectado Desconectado

Mensajes: 193


Ver Perfil
Re: No encuentro evento de DataGridViewComboBoxCell
« Respuesta #2 en: 1 Abril 2017, 14:17 »

@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.

Código
  1. ...
  2.    Private Sub ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs)
  3.  
  4.        Dim cb As ComboBox = DirectCast(sender, ComboBox)
  5.  
  6.        If (cb.SelectedIndex <> -1) Then
  7.            Dim dgv As DataGridView = DirectCast(cb.Parent.Parent, DataGridView)
  8.            Dim cell As DataGridViewCell = dgv.CurrentCell
  9.            Dim colIndex As Integer = cell.ColumnIndex
  10.            Dim rowIndex As Integer = cell.RowIndex
  11.  
  12.            'Dim sb As New System.Text.StringBuilder()
  13.            'sb.AppendLine(String.Format("Selected index changed: {0}", cb.SelectedIndex))
  14.            'sb.AppendLine(String.Format("Column Index: {0}, Row Index: {1}", colIndex, rowIndex))
  15.            'MessageBox.Show(sb.ToString())
  16.  
  17.            MessageBox.Show(CStr(DataGridView1.Item(colIndex, rowIndex).Value))
  18.            MessageBox.Show(CStr(cb.SelectedItem))
  19.        End If
  20.  
  21.    End Sub

El primer mensaje  aparece vacío, mientras que el segundo devuelve valor.

Saludos
« Última modificación: 1 Abril 2017, 14:19 por FJDA » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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 1,808 Último mensaje 13 Noviembre 2008, 03:05
por warrio666999
detener evento .net « 1 2 »
.NET (C#, VB.NET, ASP)
Ari Slash 12 6,414 Último mensaje 5 Agosto 2010, 14:30
por piwi
Evento del JFrame « 1 2 »
Java
mapers 13 12,004 Último mensaje 13 Junio 2011, 09:03
por mapers
Terminar un evento en c#
.NET (C#, VB.NET, ASP)
joalbela 1 3,188 Último mensaje 16 Junio 2011, 22:29
por joalbela
evento WMI
.NET (C#, VB.NET, ASP)
ipozorodri 1 989 Último mensaje 10 Junio 2014, 15:23
por El Benjo
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines