DataGridView e query

di il
14 risposte

DataGridView e query

Ciao a tutti,
vorrei fare in modo che una DataGridView mostri un elenco di record ottenuti attraverso una query su un database.
Mi spiego meglio: nel Form1 c'è un menu a tendina con un elenco di gare e poi c'è un pulsante "Classifica" che apre il Form2 con la grid che visualizza la classifica. Dato che nella tabella "Risultati" ci saranno i risultati di tutte le gare, vorrei che la grid visualizzasse solo la classifica della gara selezionata dall'utente.
Per passare il nome della gara da un form all'altro ho creato una stringa public e shared e non ho problemi. Poi però non so come eseguire la query e far visualizzare il risultato alla grid.
Tanto per capirci la query sarà una cosa tipo

dim querySQL as string = "select * from Risultati where NomeGara = " & nomePresoDaAltroForm"
Può avere senso?
Aspetto suggerimenti!

14 Risposte

  • Re: DataGridView e query

    Forse quello che dico si può fare anche con RowFilter...

    EDIT: infatti alla fine ho risolto così
    
    Dim ordinamentoPrima As DataView = New DataView(GolfDataSet.Tables("RisultatiPrima"))
    ordinamentoPrima.Sort = "Netto DESC, Seconde nove DESC"
    ordinamentoPrima.RowFilter = "Gara = '" & Form1.nome_gara & "'"
    RisultatiPrimaDataGridView.DataSource = ordinamentoPrima
    
    Comunque se qualcuno vuole spiegarmi come eseguire una qualsiasi query su una grid, imparo molto volentieri!!!
  • Re: DataGridView e query

    Ciao minomic,
    il RowFilter và benissimo è però limitato e non puo fare tutto quello che fa una query SQL.

    Ti ho scritto qualcosa a riguardo nel tuo altro thread sul combobox, dovrebbe essere sufficiente per partire.
    Quando hai un DataTable poi puoi esaminarlo riga per riga e inserite i valori come stringa in ListBox o altro, oppure usare le property DataSource per collegare il DataTable al tuo controllo.
    Bye
  • Re: DataGridView e query

    Ok, grazie!
    Avrei una domanda: nella mia tabella c'è una colonna che si chiama "Seconde nove" con lo spazio tra le due parole. So che non è stata una grande idea crearla così ma ormai è fatta...
    Se scrivo una query che riguarda quella colonna, tipo
    
    Dim query As String = "select Gara, Handicap, Netto, Lordo, Seconde nove from Risultati where Nome = '" & nome_scelto & "'"
    
    mi dà ovviamente errore su "Seconde nove". Se provo a scrivere
    'Seconde nove'
    sembra funzionare ma poi il valore dell'attributo è sempre fisso e stampa "Seconde nove".
    Ho provato anche a usare un alias, ad esempio
    ...'Seconde nove' as prova...
    ma il risultato è lo stesso: l'intestazione della colonna è "prova" ma poi l'attributo vale sempre "Seconde nove".
    Come si può fare?
  • Re: DataGridView e query

    Ciao minomic,
    devi scrivere [seconde nove], con le parentesi quadre.
  • Re: DataGridView e query

    Perfetto! grazie ancora
  • Re: DataGridView e query

    Ciao avrei un altro problema: uno dei form visualizza una datagridview con l'elenco di tutte le gare in programma. Io vorrei che quelle già giocate fossero colorate di grigio. La grid ha tre colonne: "data", "denominazione" e "tipo". Nel codice ho messo:
    
    Private Sub GareDataGridView_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles GareDataGridView.CellFormatting
            'colora di grigio le gare già giocate
            If e.ColumnIndex = 0 AndAlso e.Value < Date.Now.Date Then
                GareDataGridView.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightGray
            End If
        End Sub
    
    ma le colora tutte di grigio! Eppure sono sicuro che l'altro giorno funzionasse correttamente...forse una coincidenza legata all'orario o al formato della data??
    Grazie.
  • Re: DataGridView e query

    Ciao minomic
    non è che il problema sia proprio che oggi è un altro giorno.
    Nel senso che e.Value < Date.Now ieri era falsa e oggi è vera?
  • Re: DataGridView e query

    Mmm non credo di aver capito...
    Comunque ad esempio c'è una gara che come data ha 19/05/2012. Quella non dovrebbe essere colorata, e invece lo è!
    EDIT: ho provato con > Now e fuziona. Allora perchè con < no?
  • Re: DataGridView e query

    Ho provato anche con DateTime.Compare ma il risultato è lo stesso: se cerco di colorare le gare passate me le colora tutte, se cerco di colorare le gare future funziona correttamente...
  • Re: DataGridView e query

    No io parlavo del 13/5/20012 che ieri era falsa e oggi è vera. Il problema quindi è più serio. Non ho mai provato a colorare le righe diversamente, faccio qualche prova e poi ci sentiamo.
  • Re: DataGridView e query

    Perfetto, grazie ancora!
  • Re: DataGridView e query

    Ciao minomic,
    il codice che hai scritto è corretto, ho provato a colorare delle righe nel modo che hai indicato e funziona, non sapevo che si potesse fare e mi sarà utile.

    Per cui cerca qualche errore banale, del tipo stai usando la colonna sbagliata, o hai le date scombinate.
  • Re: DataGridView e query

    Ok, sono felice di esserti stato utile io una volta tanto!
    grazie
    PS. Comunque non capisco perchè con il > funziona e con il < no...
  • Re: DataGridView e query

    Problema risolto:
    
    If e.ColumnIndex = 0 Then
                If Date.Compare(e.Value, Now) < 0 Then
                    GareDataGridView.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightGray
                Else
                    GareDataGridView.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Empty
                End If
            End If
    Con il primo if andavo a modificare il colore di default delle righe e quindi erano colorate anche quelle che venivano dopo.
    Grazie comunque!
Devi accedere o registrarti per scrivere nel forum
14 risposte