Visualizzare nella combobox nome della squadra e non ID

di il
13 risposte

Visualizzare nella combobox nome della squadra e non ID

Premesso che sono un neofita e grazie al vostro forum sto imparando qualcosina ma mi sono bloccato su di un punto.

Ho un progettino con 3 form: Home, Elenco, Scheda_Giocatore

ed un database chiamato "dbgiocatori.mdb" avente 2 tabelle;
la prima GIOCATORI e la seconda SQUADRE.

Il progammino parte con la form Home dove è presente un menu con tre voci Giocatori, Tebelle e Stampe (queste ultime due non sono programmate di proposito).

Cliccando sulla prima voce Giocatori, mi appare la form Elenco dove è presente un DatadridView1 al quale è agganciato la tabella GIOCATORI composta dal cognome, nome, data di nascita, paese, squadra.

Aperta la form Giocatore e cliccando su di un record a caso del Datadridview1 il programma mi chiude questa form e mi apre la terza form ossia Scheda_Giocatore dove mi riporta tutti i dati del singolo giocatore.

Ora vengo al problema io vorrei che nella combobox di quest'utima form non mi venisse visualizzato l'id semplicemente pescato nel Datadridview1 ma il nome della squadra presente nella tabella SQUADRE associato all'Id della tabella GIOCATORI in modo tale si possano vedere anche le altre squadre presenti scorrendo la combo.


Nella speranza di essere stato chiaro ringrazio nuovamente per il tempo che qualcuno mi dedicherà.

Download del programmino: https://we.tl/sNQRt5zGn

Salvatore

13 Risposte

  • Re: Visualizzare nella combobox nome della squadra e non ID

    Posta il codice di come popoli la ComboBox
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Questo è il codice della form Elenco che poi trasferisce i dati alla form Scheda_Giocatore dove vi è la squadrecombobox

    Public Class Elenco

    Private Sub Elenco_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: questa riga di codice carica i dati nella tabella 'DbgiocatoriDataSet.GIOCATORI'. È possibile spostarla o rimuoverla se necessario.
    Me.GIOCATORITableAdapter.Fill(Me.DbgiocatoriDataSet.GIOCATORI)
    'TODO: questa riga di codice carica i dati nella tabella 'DbgiocatoriDataSet.SQUADRE'. È possibile spostarla o rimuoverla se necessario.
    Me.SQUADRETableAdapter.Fill(Me.DbgiocatoriDataSet.SQUADRE)

    End Sub

    Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    Dim formgiocatore As New Scheda_Giocatore

    formgiocatore.cognometxt.Text = DataGridView1.CurrentRow.Cells(0).Value.ToString()
    formgiocatore.nometxt.Text = DataGridView1.CurrentRow.Cells(1).Value.ToString()
    formgiocatore.datanascitatxt.Text = DataGridView1.CurrentRow.Cells(2).Value.ToString()
    formgiocatore.paesetxt.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString()
    formgiocatore.squadrecombobox.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString()

    Me.Dispose()
    formgiocatore.ShowDialog()
    End Sub
    End Class
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Si ma ti avevo chiesto semplicemente il codice di come popoli la ComboBox, non di come apri la form Scheda_Giocatore.
    Se ho ben capito il tuo problema è sulla combo.
  • Re: Visualizzare nella combobox nome della squadra e non ID

    La combo non la so popolare ma il dato mi arriva direttamente da

    formgiocatore.squadrecombobox.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString()

    che ovviamente non è il nome della squadra ma è l'id ad esso associata.
  • Re: Visualizzare nella combobox nome della squadra e non ID

    In questo modo ti popola solo il valore della riga corrente. Hai una colonna del DataGridView1 che comprenda il nome della squadra?
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Nel Datadridview1 ho una colonna dove c'è un id che indica id della squadra. Il nome descrittivo della squadra è nella tabella in Access SQUADRE dove è associato anche il ID (che è lo stesso della colonna di sopra). Ora io dovrei correlare le due tabelle e cioè ad esempio quando l'ID = 6 mi deve visualizzare nella combobox il nome Roma e questa cosa non so fare.
    Sarebbe molto più facile se tu potessi provare questo programmino al seguente link: https://we.tl/sNQRt5zGn
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Bene, possibili soluzioni.
    1) nella query fai una join con la tabella squadre e accanto all'id metti pure il nome della squadra.
    2) Quando clicki sulla riga esegui la query sulla tabella squadre ricercando il nome per id.
    3) Fai una query che popoli una datatable con id e nomi e l'associ direttamente al combo, poi tramite l'id del datagridvew ricerchi la squadra nel combo.
    Non c'è bisogno del progetto, dipende solo dalla strada che vuoi percorrere.
    P.s. Usare una combo per essere popolata solo con un nome ha poco senso...ti basterebbe una label o una txtbox...
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Saresti così gentile da farmi i 3 esempi? Queste benedette query non vogliono proprio entrarmi in testa. Ti ringrazio molto.
    P.S. Per la questione della combo l'ho inserita perché quel form in futuro deve servire anche a registrare.
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Riesci a popolare un DataTable con semplicemente i campi IDSquadra e NomeSquadra?
    In caso affermativo dai un'occhiata a questo:
    
    TuoCombo.DataSource = DataTableSquadre; TuoCombo.DisplayMember = DataTableSquadre.Colums[1].ColumnName; TuoCombo.ValueMember = DataTableSquadre.Columns[0].ColumnName;
    
    Per evidenziare poi la squadra nel combo:
    
    TuoCombo.SelectedValue=Qui metti l'id della cella della datagridview che stai selezionando;
    
    L'esempio è in c# ma puoi riadattarlo benissimo a vb.net
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Salve Max,
    non riesco proprio a capire. Ti posto i 3 form, se puoi ti chiedo gentilmente se mi puoi inserire il codice mancante.
    _______________________________________________________________________________
    'form HOME

    Public Class Home

    Private Sub GiocatoriToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GiocatoriToolStripMenuItem.Click
    Elenco.ShowDialog()

    End Sub

    Private Sub Home_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
    End Class
    _______________________________________________________________________________
    'form ELENCO

    Public Class Elenco

    Private Sub Elenco_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: questa riga di codice carica i dati nella tabella 'DbgiocatoriDataSet.GIOCATORI'. È possibile spostarla o rimuoverla se necessario.
    Me.GIOCATORITableAdapter.Fill(Me.DbgiocatoriDataSet.GIOCATORI)


    End Sub

    Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    Dim formgiocatore As New Scheda_Giocatore

    formgiocatore.cognometxt.Text = DataGridView1.CurrentRow.Cells(0).Value.ToString()
    formgiocatore.nometxt.Text = DataGridView1.CurrentRow.Cells(1).Value.ToString()
    formgiocatore.datanascitatxt.Text = DataGridView1.CurrentRow.Cells(2).Value.ToString()
    formgiocatore.paesetxt.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString()
    formgiocatore.squadrecombobox.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString()


    Me.Dispose()
    formgiocatore.ShowDialog()
    End Sub
    End Class
    ____________________________________________________________________________________
    'form SCHEDA GIOCATORE

    Public Class Scheda_Giocatore

    Private Sub Scheda_Giocatore_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: questa riga di codice carica i dati nella tabella 'DbgiocatoriDataSet.GIOCATORI'. È possibile spostarla o rimuoverla se necessario.
    Me.GIOCATORITableAdapter.Fill(Me.DbgiocatoriDataSet.GIOCATORI)
    'TODO: questa riga di codice carica i dati nella tabella 'DbgiocatoriDataSet.SQUADRE'. È possibile spostarla o rimuoverla se necessario.
    Me.SQUADRETableAdapter.Fill(Me.DbgiocatoriDataSet.SQUADRE)

    End Sub
    End Class
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Ciao Salvatore81, prova la seguente soluzione:
    La query costruita dal wizard del DataAdapter, (tasto destro su data adapter ---> Configura)
    sostituiscila con la seguente:
    
    SELECT GIOCATORI.ID, GIOCATORI.COGNOME, GIOCATORI.NOME, GIOCATORI.[DATA DI NASCITA], GIOCATORI.PAESE, GIOCATORI.SQUADRA, SQUADRE.SQUADRA AS NomeSquadra
    FROM (GIOCATORI INNER JOIN SQUADRE ON GIOCATORI.ID = SQUADRE.ID)
    
    Nel DataGridView aggiungi ovviamente una colonna(sarà la n. 5) associata al campo NomeSquadra.
    Sostituisci poi
    
    formgiocatore.squadrecombobox.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString()
    
    con
    
    formgiocatore.squadrecombobox.Text = DataGridView1.CurrentRow.Cells(5).Value.ToString()
    
    La query che ti ho riportato sopra la puoi creare anche da solo, (tanto per prenderci la mano) con il tasto generatore query del Wizard, aggiungendo la tabella Squadre ed includendo il campo Squadra.
  • Re: Visualizzare nella combobox nome della squadra e non ID

    Max sei il mio Dio!!! Grazie infinite ho fatto nottate incredibili e grazie a te ci sono arrivato.

    Ora mi esce nella combobox la squadra associata al calciatore e va benissimo ho solo dovuto modificare la query da

    FROM (GIOCATORI INNER JOIN SQUADRE ON GIOCATORI.ID = SQUADRE.ID)

    in

    FROM (GIOCATORI INNER JOIN SQUADRE ON GIOCATORI.SQUADRA = SQUADRE.ID)

    perchè prima mi associava la squadra non all'id squadra ma al giocatore.

    E se volessi vedere nella combo a discesa anche tutte le squadre presenti in quella tabella come potrei fare??

    P.S. se passi per Caserta e provincia ti devo un po di mozzarella DOP campana.
  • Re: Visualizzare nella combobox nome della squadra e non ID

    salvatore81 ha scritto:


    'TODO: questa riga di codice carica i dati nella tabella 'DbgiocatoriDataSet.SQUADRE'. È possibile spostarla o rimuoverla se necessario.
    Me.SQUADRETableAdapter.Fill(Me.DbgiocatoriDataSet.SQUADRE)

    End Sub
    End Class
    Dal Codice che hai postato qua "SQUADRE" dovrebbe essere la DataTable presente nel tuo dataset con ID e NomeSquadra.
    Se è così ti è sufficiente:
    
    TuaCombo.DataSource=DbgiocatoriDataSet.Tables("SQUADRE");
    
    Poi come indicato sopra nel mio intervento imposti le proprietà ValueMember e DisplayMember della combo alle colonne che desideri.
Devi accedere o registrarti per scrivere nel forum
13 risposte