Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [vb2010express] controllo in datagrid

    Ciao a tutti.
    Sto impazzendo con un blocco di codice.
    Devo inserire una categoria tramite imputbox, e fin qui tutto ok, ma prima di scrivere nella tabella
    controllo nel datagri che non ci siano doppioni, ma evidentemento sbagli qualche cosa, perchè
    il controllo non me lo fa.
    posto il codice

    codice:
     Private Sub cmdNuovaCategoria_Click(sender As System.Object, e As System.EventArgs) Handles cmdNuovaCategoria.Click
            Dim Risultato As String
    
            Risultato = InputBox("Inserisci Categoria", "Nuova Categoria", , , )
    
    
            For Each Riga As DataGridViewRow In CategorieDataGridView.Rows
                If Risultato = Riga.Cells("DataGridViewTextBoxColumn1").Value Then
                    Exit Sub
                    MessageBox.Show("Categoria già presente in archivio")
    
    
                End If
    
            Next
    
            Risultato = Risultato.ToUpper.Trim
    
            Me.CategorieTableAdapter.InserimentoCategoria(Risultato)
    
            Me.CategorieTableAdapter.Fill(Me.GestionaleDataSet.Categorie)
    
        End Sub
    La tabella Categorie ha una sola voce, appunto categorie chiave primaria
    grazie a tutti!
    non esistono progetti inpossibili, esistono solo uomini arrendevoli!

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Se metti Exit Sub prima del MessageBox() la vedo dura...

    Il controllo sulla validità della variabile Risultato va fatto immediatamente dopo la riga che la valorizza.

    1 - se l'utente preme Annulla, sai cosa succede?
    2 - la verifica dell'esistenza va fatta sulla tabella (non nel datagrid!)

    se il controllo non passa:
    - prima mostri il MessageBox()
    - poi fa Exit Sub

  3. #3
    Grazie per la risposta! si mi sono accorto dell'errore exi sub, quindi il controllo dovrebbe puntare alla tabella nel database?

    quindi il codice dovrebbe essere:

    codice:
    For Each Riga As DataGridViewRow In CategorieDataGridView.Rows
                If Risultato = Riga.Cells("Mia Tabella").Value Then
                    
                    MessageBox.Show("Categoria già presente in archivio")
                    Exit Sub
    Oppure anche il For Each deve puntare al database? se si come?
    non esistono progetti inpossibili, esistono solo uomini arrendevoli!

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    La risposta dipende da come hai implementato questa procedura, cioè cosa deve fare, come e perchè.

    In genere è scontato che il controllo vada fatto sulla tabella.
    Nella mia professione io realizzo principalmente programmi in multi-utenza, quindi è perentorio che un inserimento in una tabella 'statica' come quella delle Categorie io debba controllare che due o più utenti NON inseriscano la stessa categoria, altrimenti si verifica un doppione.

    Tra l'altro, l'inserimento di una nuova categoria non lo permetto mai dal codice di una griglia, ma da un form 'ad hoc' che posso richiamare attraverso una funzione che posso richiamare da qualsiasi parte del programma, esempio semplice in pseudo codice:

    codice:
    Nel DataGridView:
    
    Dim NuovaCategoria As String 
    NuovaCategoria = InserimentoNuovaCategoria()
    If NuovaCategoria = vbNullString Then Exit Sub
    If NuovaCategoria = "-1" Then
       GiàPresente
        Exit sub
    End if
    Se sono qui, è tutto OK, inserisco la nuova Categoria nella cella del DataGridView.
    
    
    In una classe:
    
    funzione InserimentoNuovaCategoria() As String 
        - mostrail form 'ad hoc' per l'inserimento della categoria
        - inserisce la nuova categoria (se non è già presente)
        - restituisce il nome della nuova categoria
        - se premo Annulla: restituisce una stringa vuota
        - oppure "-1" se esiste già
    fine funzione
    Il vantaggio è che scrivi il codice una sola volta e lo richiami dal programma quando ti serve.
    Al contrario, scrivendo il codice all'interno di ogni Form in cui gestisci le categorie ti costringe un domani, in caso di modifica, a cercare nel progetto tutti i punti in cui è usato per modificarli tutti.

    N.B.
    Il form 'ad hoc' può essere ereditato dato che le uniche 'varianti' che cambiano sono:
    - il nome della tabella
    - il nome del campo
    e così puoi utilizzarlo per inserire qualsiasi cosa...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.