Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    111

    Collegare DataGridView

    Ho un problema stupidissimo (o almeno credo). Nonostante tutto non riesco a risolverlo.
    Quando uno vuole collegare a una table una Combobox usa questo codice:

    codice:
    Combobox1.DataSource = "Tabella a cui ci si riferisce"
    Combobox1.DisplayMember = "Campo da visualizzare"
    Combobox1.ValueMember = "ID del campo che viene selezionato"      
    
    Combobox1.DataBindings.Add("Text", BindingSource (anche un'altra bindingsource), "Campo da visualizzare come binding")

    Quindi, analogamente, quando collego una DataGridView con una ComboBox dovrei scrivere:

    codice:
    DataGridView.DataSource = "BindingSource1"
    
    DataGridViewComboBox1.DataSource = "Tabella a cui ci si riferisce (anche non della BindingSource1)"
    DataGridViewComboBox1.DisplayMember = "Campo da visualizzare"
    DataGridViewComboBox1.ValueMember = "ID del campo che viene selezionato"      
    
    DataGridViewComboBox1.DataPropertyName = "Nome del campo da collegare (Vorrei che fosse di BindingSource1)"
    Se il nome del campo fa parte della stessa tabella, tutto bene. Se invece è una tabella in un'altra bindingSource, mi esce il seguente messaggio:

    Si è verificata la seguente eccezione in DataGridView.
    System.FormatException: Valore di ComboBoxCell non valido.
    Per sostituire questa finestra di dialogo predefinita, gestire l'evento DataError

    Cosa ho sbagliato?

    Vorrei fare un modulo per le fatture.
    Scelgo l'articolo nella tendina articoli e copio gli altri valori nella sottomaschera della fattura.

    Grazie a chi mi risponderà.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    111
    Sono riuscito a circoscrivere l'errore.
    Forse adesso siete in grado di capire quale è la causa:

    codice:
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Dim con As New OleDb.OleDbConnection
            Dim sql As String
            Dim ds As New DataSet
            Dim da As OleDb.OleDbDataAdapter
            Dim bs As New BindingSource
    
            con.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = Archivio.mdb"
            con.Open()
    
            sql = "SELECT * FROM Anagrafica"
            ds = New DataSet("Anagrafica")
    
            da = New OleDb.OleDbDataAdapter(sql, con)
            da.Fill(ds, "Anagrafica")
    
            bs = New BindingSource()
            bs.DataSource = ds
            bs.DataMember = "Anagrafica"
    
            con.Close()
    
            DataGridView1.DataSource = bs
            Column1.DataPropertyName = "Nome" 
        End Sub
    End Class
    L'errore è nella riga rossa.
    Quando avvio il programma mi esce l'errore del messaggio precedente.
    Column1 e una Combobox.

    Non è necessario che vi dica che il nome del campo è giusto e che viene visualizzato correttamente nella colonna autogenerata.

  3. #3
    per caso c'è qualche dato NULL in quella colonna?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    111
    Ci avevo pensato anche io...
    Sono tutti riempiti!

    La cosa strana è che la colonna accanto, anche quella aggiunta, di tipo textbox, funziona bene! (e vi sualizza sempre "Nome").
    Inoltre la stessa colonna funziona bene con la generazione automatica...

    Quindi il problema non è nel database, ma nel codice ( o nella combo)...

  5. #5
    Ciao, il campo che assegni alla DataPropertyName, deve essere dello stesso tipo del campo ValueMember.
    Pertanto se il campo di ValueMember è di tipo Int32, anche il campo di DataPropertyName deve essere di tipo Int32.
    Logicamente, se il campo assegnato alla DataPropertyName contiene valori che non sono nel campo del ValueMember, ti darà sempre errore.
    Jupynet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    111
    Perfetto! Ho capito.
    Adesso sorge un problema...

    Un campo Integer in Access 2003, come viene convertito in VB.NET?
    Single, Double, Int16, 32, 64, UInt ecc...

  7. #7
    Ciao, Int32.
    Jupynet

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.