Aggiornamenti gridview e detailsview

venerdì 08 giugno 2007 - 09.59

_J_ Profilo | Senior Member

Buongiorno a tutti!
Ebbene sì, subito dopo aver risolto il problema delle query parametriche eccomi a proporvi subito un altro quesito...

Il database con cui lavoro è fatto da una sola tabella con alcuni campi, tra cui un campo chiave primaria di tipo int per cui ho scelto Is Identity= no, sennò non mi fà le insert (dice che identity_insert è settato a off)
Ho una gridview per vedere tutti i dati, e un detailsview per vedere un solo record per volta e per inserire dei nuovi record nel database.

Gli aggiornamenti, cancellazioni ed inserimenti li fa benissimo sia su gridview che su detailsview, infatti viene riportato tutto in modo corretto su database... ma il problema è l'aggiornamento della gridview dopo una insert: dopo aver editato il nuovo record, il gridview non mi fa vedere subito l'aggiunta, ma devo ricompilare tutto...
per update e delete l'aggiornamento è immediato, ma non per le insert... come posso aggiornare il tutto in maniera immediata?

riungrazio già da ora chi mi risponderà!
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>Buongiorno a tutti!
Ciao
>Ebbene sì, subito dopo aver risolto il problema delle query parametriche
>eccomi a proporvi subito un altro quesito...
>
>Il database con cui lavoro è fatto da una sola tabella con alcuni
>campi, tra cui un campo chiave primaria di tipo int per cui ho
>scelto Is Identity= no, sennò non mi fà le insert (dice che identity_insert
>è settato a off)
Questo non è necessario, basta impostare l'identity e non indicarlo nella insert, poichè essendo un campo readonly, si autogestisce "da solo". Basta non forzare valori al suo interno.

>Ho una gridview per vedere tutti i dati, e un detailsview per
>vedere un solo record per volta e per inserire dei nuovi record
>nel database.
>Gli aggiornamenti, cancellazioni ed inserimenti li fa benissimo
>sia su gridview che su detailsview, infatti viene riportato tutto
>in modo corretto su database... ma il problema è l'aggiornamento
>della gridview dopo una insert: dopo aver editato il nuovo record,
>il gridview non mi fa vedere subito l'aggiunta, ma devo ricompilare
>tutto...
>per update e delete l'aggiornamento è immediato, ma non per le
>insert... come posso aggiornare il tutto in maniera immediata?
dopo che hai eseguito la insert, fai il databind del gridview?
>

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ben ritrovato!!!
il databind... ecco che avevo dimenticato... grazie per avermelo ricordato ç_ç

il problema dell'identity_insert mi rimane, ho modificato la insert come mi dici tu ma devo per forza settare l'indexer su off sennò mi ripropone sempre lo stesso problema...

inoltre ho notato che una volta che cancello un record mi accorgo che cancella anche il valore della chiave primaria, e di conseguenza non c'è una sequenza continua...adesso mi spiego meglio...

se ad esempio ho questi record con la chiave primaria e un certo valore:
1----valore1
2----valore2
3----valore3,

se ad esempio elimino il valore2 mi rimarrà
1-----valore1
3-----valore3

mentre vorrei
1----valore1
2----valore3

ho capito che il problema ha la stessa natura e causa di quello della insert, ma come ti ho detto prima il problema mi è rimasto...
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>ben ritrovato!!!
>il databind... ecco che avevo dimenticato... grazie per avermelo
>ricordato ç_ç

>
>il problema dell'identity_insert mi rimane, ho modificato la
>insert come mi dici tu ma devo per forza settare l'indexer su
>off sennò mi ripropone sempre lo stesso problema...
direi che lì c'è qualcosa che non va..
se definisci una insert senza la colonna identity indicata, deve funzionare. In alternativa puoi farti una bella e sicura stored procedure che gestisca l'inserimento.. ma questo te lo lascio come studio..
Supponi di avere la tabella seguente

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come puoi notare l'inserimento con colonna identity funziona, devi stare attento a cosa fai nell'applicazione

>
>inoltre ho notato che una volta che cancello un record mi accorgo
>che cancella anche il valore della chiave primaria, e di conseguenza
>non c'è una sequenza continua...adesso mi spiego meglio...
certo, viene eliminato il record. Interamente. E se hai identity, il valore eliminato lo perdi.
>
>se ad esempio ho questi record con la chiave primaria e un certo
>valore:
>1----valore1
>2----valore2
>3----valore3,
>
>se ad esempio elimino il valore2 mi rimarrà
>1-----valore1
>3-----valore3
>
>mentre vorrei
>1----valore1
>2----valore3
Beh per fare questo dovresti eliminare il valore2, togliere l'identity, fare l'update della chiave.. ecc.. insomma.. una cosa molto brutta.

Io metterei un campo identity, correggerei l'errore che continui ad avere (se imposti per bene la insert ed i parametri va a posto tutto) e non mi interesserei della sequenza del progressivo di chiave. Se proprio ti serve in serie, non utilizzare identity e quando inserisci, lanci una stored procedure che va ad inserire sempre il massimo valore della chiave + 1.. Ma stai attento, perchè col passare del tempo l'inserimento sarà sempre più pesante.
Se ritieni che non sia VERAMENTE necessario avere la sequenza precisa, lascia i buchi, è un id, non succede niente.
E' chiaro però che se devi avere per forza un progressivo, devi gestire un ulteriore campo che ti dà quello che ti serve. Un campo intero che incrementi ogni volta applicativamente.

>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
>
>"Conosco me stesso? No, non parlo con gli estranei..."

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao! scusa se sono sparito senza rispondere ma in questi giorni la salute mi ha abbandonato...
lo sai? ho impostato l'identity insert su on e ho modificato la query senza specificae ilcampo di chiave, e mi va tutto bene!!
grazie ancora!

invece per quel che riguarda le chiavi primarie... l'identity va da solo ma come ti dissi una volta cancellato un record l'ordinale usato non viene più riutilizzato, anzi va sempre avanti...

il fatto è che la tabella che curo ora è un semplice login, e posso tranquillamente trascurare questo fatto, ma una volta che userò altre tabelle che per loro natura devono sempre essere aggiornate (si tratta di un'anagrafe) dovrò riciclare gli ordinali delle chiavi primarie... e credo proprio di dover usare delle stored procedures...

cmq ti ringrazio ancora tanto!

_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>ciao!
ciao!

>scusa se sono sparito senza rispondere ma in questi giorni
>la salute mi ha abbandonato...
stai meglio ora?

>lo sai? ho impostato l'identity insert su on e ho modificato
>la query senza specificae ilcampo di chiave, e mi va tutto bene!!
>grazie ancora!
>invece per quel che riguarda le chiavi primarie... l'identity
>va da solo ma come ti dissi una volta cancellato un record l'ordinale
>usato non viene più riutilizzato, anzi va sempre avanti...
come ti ho già scritto è del tutto normale.
>
>il fatto è che la tabella che curo ora è un semplice login, e
>posso tranquillamente trascurare questo fatto, ma una volta che
>userò altre tabelle che per loro natura devono sempre essere
>aggiornate (si tratta di un'anagrafe) dovrò riciclare gli ordinali
>delle chiavi primarie... e credo proprio di dover usare delle
>stored procedures...
Un momento.. se si tratta di un'anagrafe di utenti, basta inserire un campo UserName che contenga un indice univoco, in modo che poi l'aggiornamento puoi anche farlo per quel campo, ignorando completamente la chiave autoincrementante.
Sinceramente, continuo a non vedere il problema..
Quando sarà il momento, fatti vivo..
>
>cmq ti ringrazio ancora tanto!
di nulla!
>
>_J_
>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
>
>"Conosco me stesso? No, non parlo con gli estranei..."

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

sto meglio, grazie, ma non ancora al 100%...

no, il mio progetto non è un'anagrafe di utenti...
uso un db per autenticazione e per l'accesso ad un'altro db che contiene un'anagrafe...

nel db di login c'è poca variazione di record, mentre per un db di anagrafe è una cosa continua....
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5