Ecco qui un tip targato SMAU. "Come possibile intercettare il keypress di una cella di una datagrid?"... Bella domanda... ci lavoro anche pooco con le windows application :o Aiutato da giovanni - piu abituato a muoversi con apllicazioni desktop - ecco qui il tip che ne è uscito... questa è la bozza di codice in VB.Net da cui partirò per ricavare un tip da pubblicare ufficialmente!
Prima di tutto: sia una Form e una DataGrid che con sforzo di fantasia chiameremo Form1 e Datagrid1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'//Creazione e inizializzazione statica del dataset.
Dim ds As DataSet = New DataSet()
Dim dt As DataTable = ds.Tables.Add("Test")
dt.Columns.Add("ColonnaUno")
dt.Columns.Add("ColonnaDue")
dt.Rows.Add(New Object() {"uno", "pippo"})
dt.Rows.Add(New Object() {"due", "pluto"})
dt.Rows.Add(New Object() {"tre", "peperino"})
'//Creazione della DataGridTableStyle e inizializazione.
'//le operzioni che seguono sono gestibili anche da relativo
'//property builder.
'//--
Dim aDataGridTableStyle As New DataGridTableStyle()
aDataGridTableStyle.MappingName = "Test"
Dim aTextBoxColumn1 As New DataGridTextBoxColumn()
aTextBoxColumn1.HeaderText = "ColonnaUno"
aTextBoxColumn1.MappingName = "ColonnaUno"
aDataGridTableStyle.GridColumnStyles.Add(aTextBoxColumn1)
Dim aTextBoxColumn2 As New DataGridTextBoxColumn()
aTextBoxColumn2.HeaderText = "ColonnaDue"
aTextBoxColumn2.MappingName = "ColonnaDue"
aDataGridTableStyle.GridColumnStyles.Add(aTextBoxColumn2)
DataGrid1.TableStyles.Add(aDataGridTableStyle)
'//--
'//Recupeo DataGridTableStyle di cui voglio intercettare
'//il keypress delle celle.
Dim TheDataGridTableStyle As DataGridTableStyle
TheDataGridTableStyle = DataGrid1.TableStyles.Item("Test")
'//Ciclo su colonne della DataGridTableStyle e imposto gli handler per
'//l'evento KeyPress delle le colonne che mi interessano.
Dim aDataGridColumnStyle As DataGridColumnStyle
Dim aDataGridBoolColumn As DataGridBoolColumn
For Each aDataGridColumnStyle In aDataGridTableStyle.GridColumnStyles()
Dim aDataGridTextBoxColumn As DataGridTextBoxColumn
If TypeOf aDataGridColumnStyle Is DataGridTextBoxColumn Then
aDataGridTextBoxColumn = DirectCast(aDataGridColumnStyle, DataGridTextBoxColumn)
AddHandler aDataGridTextBoxColumn.TextBox.KeyPress, _
AddressOf Me.DataGrid1TextBoxColumn_KeyPress
End If
Next
'//Imposto dataset come datasource della griglia.
DataGrid1.DataSource = ds.Tables(0)
End Sub
Private Sub DataGrid1TextBoxColumn_KeyPress( _
ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Dim c As Integer = DataGrid1.CurrentCell.ColumnNumber
Dim r As Integer = DataGrid1.CurrentCell.RowNumber
Dim columnName As String = DataGrid1.TableStyles("Test").GridColumnStyles(c).MappingName
Dim t As TextBox = DirectCast(sender, TextBox)
MessageBox.Show(String.Format( _
"KeyPress on TextBoxColumn Item({0},{1}): columnName: {2}, columnValue: {3}, tasto premuto: '{4}'", _
r, c, columnName, t.Text, e.KeyChar))
End Sub
Mi rimane un quesito: "Come intercettare - se ha senzo farlo - gli eveventi di una DataGridBooleanColumn?"
Le DataGridBooleanColumn sono quelle colonne con la CheckBox :o
Bah a prima vista non ho trovato soluzioni...