Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Ennesima prova!

    Ho eliminato il controllo relativo alla colonna:

    codice:
    If DataGrid1.CurrentCell.ColumnNumber = 0 Then
    In questo modo, scrivendo la solita tiritera...

    codice:
    Dim myColumnNumber As Integer = Me.DataGrid1.CurrentCell.ColumnNumber
    Dim myRowNumber As Integer = Me.DataGrid1.CurrentCell.RowNumber
    Dim myCell As New DataGridCell
    myCell.RowNumber = myRowNumber
    myCell.ColumnNumber = 1
    Me.DataGrid1.Item(myCell) = "Prova"
    La seconda colonna mi viene aggiornata con la stringa "Prova".
    Solo che, il valore che avevo inserito nella prima colonna svanisce e il focus rimane sulla prima colonna!

    Voglio dire, se mi posiziono sulla prima colonna, inserisco il valore "naighes26101977" e premo il tasto "Tab", La seconda colonna mi viene aggiornata con la stringa "Prova" , ma la stringa "naighes26101977" si cancella e il focus rimane nella prima colonna.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  2. #12
    Utente di HTML.it L'avatar di Sypher
    Registrato dal
    Jun 2003
    Messaggi
    1,994
    Azz...naighes te succedono tutte a te!!!
    La passera non dura perchè Sypher la cattura!

    "No one like us we don't care, we are millwall, super millwall, we are millwall from the DEN"

  3. #13
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    ma non è che hai altri eventi (che qui non hai postato) che scattano durante l'esecuzione della sub?

    ocio che le griglie appena fai mezza mossa lanciano 249851294857149508 eventi :gren:

  4. #14
    L'unico evento che gestisco è quello relativo al cambio di colonna. (vedere codice)

    Comunque cercherò di esporre il mio problema.

    Mi creo un DataGrid di 3 Colonne.
    Vorrei far si che una volta che l'utente inserisce un valore all'interno della prima colonna e, successivamente, preme il tasto "Tab", nella seconda e terza colonna compaia una determinata Stringa.

    Quindi:
    codice:
    'Dichiariamo le variabili pubbliche
    Public DataGrid1 As DataGrid
    Public WithEvents tabellaDatiDocumento As DataTable
    
    'Questa Sub mi inizializza tutti i componenti
    Private Sub initComponenti()
    
         Me.DataGrid1 = New DataGrid
         Me.Controls.Add(DataGrid1)
         Me.tabellaDatiDocumento = New DataTable("Documento")
    
         'Ok, creiamo un paio di colonne
         Dim colonnaDocumento As DataColumn
         Dim rigaDocumento As DataRow
    
         'Creo la colonna per il Codice
         colonnaDocumento = New DataColumn
         colonnaDocumento.DataType = System.Type.GetType("System.String")
         colonnaDocumento.ColumnName = "Codice"
         colonnaDocumento.Caption = "Codice"
         tabellaDatiDocumento.Columns.Add(colonnaDocumento)
    
         'Creo la colonna per la Descrizione
         colonnaDocumento = New DataColumn
         colonnaDocumento.DataType = System.Type.GetType("System.String")
         colonnaDocumento.ColumnName = "Descrizione"
         colonnaDocumento.Caption = "Descrizione"
         tabellaDatiDocumento.Columns.Add(colonnaDocumento)
    
         'EVITO DI SCRIVERE IL CODICE RELATIVO ALLA TERZA COLONNA...
    
         'Il mio dataset...
         Dim dataSetDocumento = New DataSet("Documento")
         DataGrid1.SetDataBinding(dataSetDocumento, "Documento")
         '...Imposto l'origine dei Dati...
         Me.DataGrid1.DataSource = tabellaDatiDocumento
         dataSetDocumento.Tables.Add(tabellaDatiDocumento)
         '... e l'handler per gestire l'evento.
         AddHandler tabellaDatiDocumento.ColumnChanged, AddressOf Table_CurColChange
    End Sub
    E adesso, la sub relativa alla gestione dell'evento:

    codice:
    Public Sub Table_CurColChange(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)
         Dim myRowNumber As Integer = DataGrid1.CurrentCell.RowNumber
         Me.DataGrid1.Item(myRowNumber, 1) = "Stringa1"
         Me.DataGrid1.Item(myRowNumber, 2) = "Stringa2"
    End Sub
    E non funziona!
    O meglio, mettendo una delle due righe (quelle di "Stringa1" e "Stringa2") funziona (anche se si cancella il contenuto della prima colonna!), ma se le metto entrambe nisba.

    Sono totalmente disperato!
    Se qualcuno riesce a capire dove sbaglio, lo apprezzerei molto.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  5. #15
    Ho l'impressione che il tuo problema sia da mettere in relazione con l'argomento e dell'evento. Ti sei guardato la documentazione relativa all'evento DataTable.ColumnChanged?
    Chi non cerca trova.

  6. #16
    Finalmente capisco dove risiede il problema!

    Cerco di spiegarmi.
    Quando si verifica l'evento relativo al cambio di una colonna, io eseguo questo codice:
    codice:
    Me.DataGrid1.Item(myRowNumber, 1) = "Stringa1"
    Me.DataGrid1.Item(myRowNumber, 4) = "Stringa2"
    La modifica di ciascuna di queste due proprietà genera a sua volta lo stesso evento! Ecco perchè mi va tutto in balla!

    Come risolvere questo inghippo?
    Come faccio a far sì che l'evento si manifesti solo quando viene modificato il valore della prima colonna??

    Vi ringrazio in anticipo.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  7. #17
    La modifica di ciascuna di queste due proprietà genera a sua volta lo stesso evento! Ecco perchè mi va tutto in balla!
    Questo si era già assodato. Potresti mettere un flag:
    codice:
    Private flag As Boolean
    
    Public Sub Table_CurColChange(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)
        If flag = False Then
            flag = True
            Dim myRowNumber As Integer = DataGrid1.CurrentCell.RowNumber
            Me.DataGrid1.Item(myRowNumber, 1) = "Stringa1"
            Me.DataGrid1.Item(myRowNumber, 2) = "Stringa2"
            flag = False
        End If
    End Sub
    Chi non cerca trova.

  8. #18
    Sei un mito.
    Funziona alla grande!
    Grazie infinite.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  9. #19
    Io non ho potuto verificare il codice che ti ho suggerito, ma dovrebbe funzionare. Te lo spiego:
    codice:
    Private flag As Boolean
    
    Public Sub Table_CurColChange(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)
        If flag = False Then
            flag = True
            Dim myRowNumber As Integer = DataGrid1.CurrentCell.RowNumber
            Me.DataGrid1.Item(myRowNumber, 1) = "Stringa1"    'qui parte un evento ColumnChanged, ma in questo momento flag = True
            Me.DataGrid1.Item(myRowNumber, 2) = "Stringa2"    'come sopra
            flag = False
        End If
    End Sub
    Normalmente flag = False, quindi la prima esecuzione dell'evento passa per il blocco If. L'evento successivo avviene non appena viene eseguita la riga Me.DataGrid1.Item(myRowNumber, 1) = "Stringa1", ma in questo momento flag = True e quindi non entra nel blocco If. Stesa cosa dicasi per la riga successiva, infine con flag = False si va a togliere il blocco dell'istruzione If.
    Chi non cerca trova.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.