Capitolo 3. Gli Ordinamenti

                                                                                                                                                                                                                                                                       

3.1 Le Opzioni Ordinamento

 

Vogliamo ora fare un altro piccolo passo avanti e sviluppare il nostro Esercizio in modo che si possa agevolmente passare da un ordinamento ad un altro per ottenere visualizzazioni mirate.

 

Riprendiamo allora nostro Esercizio 01 e  con il solito metodo del copia e incolla creiamo una nuova Cartella ESERCIZIO_03.

 

Aggiungiamo al Form i seguenti comandi:

 

-        Un Frame con Name “FraOrdinamenti” e con Caption “ Ordinamenti “ (meglio mettere uno spazio prima e dopo quando si definisce la Caption). Impostare la proprietà Visible di questo Frame a “False”.

-        Un OptionButton a Name “optCodice” e Caption “Per Codice Autore” collocato sopra il Frame. Impostare la proprietà Value su True

-        Un OptionButton a Name “optAutore” e Caption “Per Nome Autore” anch’esso collocato sul Frame. Impostare la proprietà Value su False.

 

 

Lasciamo l’evento Click del cmdRecordSet invariata tranne l’aggiunta alla fine dell’istruzione:

 

fraOrdinamenti.Visible = True

autordi = 1

 

 

La variabile “AUTORDI” va aggiunta alle dichiarazioni del Form.

 

Nell’evento Click del primo OptionButton scriviamo questa routine:

 

 

Private Sub optCodice_Click()

 

Selezione = "Select * from AUTHORS order by AU_ID"

aut11.Close

aut11.Open "" & Selezione & "", Cn, adOpenStatic, adLockOptimistic

Set DataGrid1.DataSource = aut11

DataGrid1.ReBind

 

 DataGrid1.Caption = "Video List per Codice Autore"

optCodice.Value = False

autordi = 1

 

End Sub

 

 

Per la seconda Opzione scriviamo:

 

Private Sub optnome_Click()

 

Selezione = "Select * from AUTHORS order by AUTHOR,AU_ID"

aut11.Close

aut11.Open "" & Selezione & "", Cn, adOpenStatic, adLockOptimistic

Set DataGrid1.DataSource = aut11

DataGrid1.ReBind

 

DataGrid1.Caption = "Video List per Nome Autore"

optNome.Value = False

autordi = 2

 

End Sub

 

 

Quello che vogliamo ottenere e’ che  clikkando il  bottone Recordset ADO questi apra “AUT11” e faccia diventare Visibile il Frame. Partendo dal Frame si puo’ modificare l’ordine dei Records a piacimento, da Codice Autore a Nome Autore.

 

Possiamo ora lanciare il programma ed osservare come la visualizzazione del DataGrid passi da ordinamento codice ad ordinamento nome Autore.

 

Modifichiamo ora l’evento Click del bottone “FIND”, cmdCerca come segue:

 

Private Sub cmdCerca_Click()

 

marka = aut11.Bookmark

Select Case autordi

Case 1

'----------------------

zricerca = Int(Val(txtCerca.Text))

If zricerca = 0 Then

MsgBox (txtCerca.Text & " Carattere non valido.")

Exit Sub

End If

'----------------------

kriterio = "AU_ID = " & zricerca & " "

aut11.MoveFirst

aut11.Find kriterio

 

Case 2

'----------------------

zricerca = txtCerca.Text

'----------------------

kriterio = "AUTHOR >= '" & zricerca & "' "

aut11.MoveFirst

aut11.Find kriterio

 

End Select

 

'non trovato

'----------------------

If aut11.EOF Then

MsgBox (" " + Trim(txtCerca.Text) & acapo & " non trovato !")

aut11.Bookmark = marka

End If

fine:

End Sub

 

 

Se ora si rilancia il programma, si possono effettuare ricerche per codice Autore oppure per (lettera iniziale) nome Autore.

 

3.2 Apertura da VB.NET

 

Vogliamo anche qui  preparare un Progetto che si comporti nello stesso modo sotto Visual Basic Express.

 

Prepariamo  nuova Cartella/Directory all’interno della Cartella GRIGLIE_ADO. In pratica possiamo fare un copy della Cartella ESERCIZIO_01_NET ed incollarla con il nome ESERCIZIO_03_NET.

 

Partiamo con il Form a cui daremo un aspetto simile a quello visto sopra.

 

 

 

 

Nel Form sono presenti i seguenti elementi:

 

-        Un Frame con Name “Panel1” . La proprieta’ Visibile e’ impostata a False.

-        Un RadioButton a Name “optCod” e Text “Per Codice Autore” collocato sopra il Frame. La proprietà checked e’ impostata a False (si noti:contrariamente al caso di VB6).

-        Un RadionButton a Name “optNom” e Text “Per Nome Autore” anch’esso collocato sul Frame. La proprietà checked e’ anch’essa impostata a False.

 

Inoltre aggiungiamo due Labels sopra il DataGridView destinate a contenere il titolo della Video Lista, dato che il DataGridView non possiede la proprieta’ “Caption”.

 

La seconda di queste Labels avra’ Nome “LBLHEADER”.

L’aoertura di AUT11 nell’evento Click del cmdRecordSet resta invariato. Aggiungiamo inoltre le seguenti istruzioni:

 

 

'datagridview1

        '-------------------------------------------

        DataGridView1.DataSource = aut11
        lblHeader.Text = "per Codice"

        autordi = 1

        Panel1.Visible = True

        Optcod.Checked = True

 

 

Inoltre, la variabile “AUTORDI” va aggiunta come Public alle dichiarazioni del Form.

 

Nell’evento Click del primo RadioButton scriviamo questa routine:

 

 

Private Sub Optcod_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Optcod.CheckedChanged

 

        SelezAut = "Select * from AUTHORS order by AU_ID"

        autfresca()

        lblHeader.Text = "per Codice"

        autordi = 1

    End Sub

 

 

E per il secondo:

 

  Private Sub optnom_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optnom.CheckedChanged

        SelezAut = "Select * from AUTHORS order by AUTHOR"

        autfresca()

        lblHeader.Text = "per Nome"

        autordi = 2

    End Sub

 

 

Il cambio di ordinamento di “AUT11” si effettua con la definizione di una nuova stringa SQL e con il ricorso alla Subroitine “AUTFRESCA” vista nel Capitolo precedente.

 

Riassumendo, anche qui clikkando il  bottone Recordset ADO questi apre “AUT11” e fa diventare Visibile il Frame. Partendo dal Frame si puo’ modificare l’ordine dei Records a piacimento, da Codice Autore a Nome Autore.

 

Vediamo ora l’evento Click del bottone “FIND”, cmdCerca :

 

Private Sub cmdCerca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCerca.Click

 

        Select Case autordi

            Case Is = 1

                'carattere non valido

                '----------------------

                Dim zricerca

                zricerca = Int(Val(txtCerca.Text))

                If zricerca = 0 Then

                    MsgBox(txtCerca.Text & " Carattere non valido.")

                    Exit Sub

                End If

 

 

                'find

                '----------------------

                Dim foundIndex As Integer = aut11.Find("AU_ID", txtCerca.Text)

                If foundIndex > -1 Then

                    DataGridView1.FirstDisplayedScrollingRowIndex = foundIndex

                    aut11.Position = foundIndex

                Else

                    Dim acapo

                    acapo = Chr(13) + Chr(10)

           MessageBox.Show(" " + Trim(txtCerca.Text) & acapo & " non trovato !")

                End If

            Case Is = 2

                aut11.Filter = "AUTHOR >= '" & txtCerca.Text & "'"

        End Select

 

    End Sub

 

 

In definitiva, si possono effettuare ricerche per codice Autore oppure per (lettere iniziali) nome Autore.

 

 

Fine del Capitolo 3. Gli Ordinamenti