DataGrid e KeyPress, un tip targato SMAU

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

posted @ lunedì 6 ottobre 2003 14:24

Print
Comments have been closed on this topic.
«dicembre»
domlunmarmergiovensab
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678