Newsgroup: it.comp.lang.visual-basic
Titolo: Come indurre in Ordine i campi scritti, in un DATAGRID

Salve a tutti,
Volevo chiedere a tutti voi, un consiglio, in merito a visual basic, e agli
ADO,  che stò usando per creare un data base, (FILE MDB), con interfaccia
fatta con VB.
Stò letteralmente "sclerando" per indurre nei DATAGRID, (che uso per
visualizzare i dati), l'ordinamento degli stessi dati,  in base ai campi
della tabella, ( i cui nomi sono riportati in cima alla colonna) e che
che l'utente con un click, seleziona e (nelle mie intenzioni) ordina, in
base ad un ordine (as esempio progressivo- ascendente) di quel campo
selezionato.
Il problema non è l'evento, che ho trovato e funziona,
ma il codice che non trovo e che non sò implementare.
Non sò su cosa agire, proprietà, metodi, o quant'altro mi serve. Ho visto e
studiato un pò di tutto
E quello che ho trovato su MSDN non funziona, o comunque non è adatto a
quello che voglio, (o non riesco ad utilizzare).
Ho provato anche a rifare una query, con SORT BY, ma sulla tabella i dati si
riproducono come al solito in modo casuale.
Magari per molti di voi è facile, per me no, sono alle prime armi,
veramente. Spero che un'anima buona mi aiuti.
HELP ME!!! POR FAVOR.....

 wrote in message
9bc0d8$rbq$1...@nreadA.inwind.it...


 fgmac
Grazie della risposta, la griglia č cosě come la descrive MSDN, cioč:
 DataGrid (questa č la sua definizione, il quale aggiunge: "Il funzionamento
del controllo DataGrid č simile a quello del controllo DBGrid. L'unica
differenza č il fatto che il controllo DataGrid non supporta la modalitŕ non
associata")
inoltre per ciň che riguarda il db, č ACCESS 2000, e per accedere passo
tramite il provider ODBC.
Per la query, puň darsi che scriva stupidagini, a scanso di equivoci
riporto:
Private Sub GrdClienti_HeadClick(ByVal ColIndex As Integer)
'cliccando sulla testa delle colone, ordino la tabella, (che nel db Access
si chiama "Clienti")  in base alla colonna selezionata,
'chiamando una funzione/routine, che legge la "colonna cliccata" e che in
base ad essa, realizza una query.
Select Case ColIndex
    Case Is = 0
    paramOrdinamento = "IDCliente"
    Case Is = 1
    paramOrdinamento = "RagioneSociale"
....
End Select
    riordinaDataGrid
End Sub
Public Sub riordinaDataGrid()
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseServer
    sQuery = "select * from Clienti order by " & paramOrdinamento
    rs.Source = sQuery
    rs.ActiveConnection = cn
    'la connessione č attiva e funziona
    rs.CursorType = adOpenDynamic
    rs.LockType = adLockPessimistic
    rs.Open
    'che dovrebbe aggiornare,ma che non funziona.
    rs.Update
    rs.Close
    FrmCliente.AdoClienti.Refresh
    FrmCliente.GrdClienti.Refresh
    Set rs = Nothing
End Sub
 Forse, sicuramente non č per nulla un buon codice, ma stň imparando. Se
avete devi suggerimenti piů specifici, sarei felicissimo di apprenderli e
metterli in pratica.
Grazie e Buona Pasqua a tutti.

 avete devi suggerimenti più specifici, sarei felicissimo di apprenderli e



Si in effetti il codice:
FrmCliente.AdoClienti.Refresh
FrmCliente.GrdClienti.Refresh
 avrebbe avuto nelle intenzioni costringere il refresh, cioč
all'aggiornamento sia del'Adoc utilizzato per collegarmi alla tabella, che
il DataGrid, in questione, ma senza risposta e risultato, e poi queste due
righe di codice ho provato anche a commentarle, e  nel debug mai avuto
allarmi o problemi, e comunque non funzionano, nessuna.
sperando in qualche utile spunto e commento saluto e ringrazio ancora, buona
Pasquetta a tutti.

 End Sub
Soluzione del problema (o almeno prova se cosi' ti va...)
##############################################
Option Explicit
Private rs As ADODB.Recordset
Public Sub riordinaDataGrid()
    Set rs = Nothing
    Set rs = New ADODB.Recordset
    sQuery = "select * from Clienti order by " & paramOrdinamento
    rs.CursorLocation = adUseServer ' adUseClient, adUseServer
    rs.Open sQuery, cn, adOpenKeyset, adLockOptimistic, adCmdText
    Set rs.ActiveConnection = Nothing
    ' dovresti chiudere la connessione qui
    FrmCliente.GrdClienti.DataSource = rs
    FrmCliente.GrdClienti.Refresh
End Sub
##############################################
Quando hai a che fare con query non parametriche, usi "adCmdText".
Quando hai a che fare con tabelle, usi "adCmdTable".
Quando hai a che fare con query parametriche, usi "adCmdStoredProc".

 ##############################################
Azz... sto dormendo... :)
Prima ti dico che per ottenere un recordset disconnesso devi usare un cursore lato client
e poi ti faccio chiudere la connessione usando un cursore lato server...
##############################################-NUOVA VERSIONE
Public Sub riordinaDataGrid()
    Set rs = Nothing
    Set rs = New ADODB.Recordset
    sQuery = "select * from Clienti order by " & paramOrdinamento
    rs.CursorLocation = adUseServer ' adUseClient, adUseServer
    rs.Open sQuery, cn, adOpenKeyset, adLockOptimistic, adCmdText
    FrmCliente.GrdClienti.DataSource = rs
    FrmCliente.GrdClienti.Refresh
End Sub
##############################################