[VB.NET 2005 EXPRESS] DataGridView e problema che mi sta facendo impaz...

martedì 19 agosto 2008 - 19.09

plaguebreath Profilo | Junior Member

Salve a tutti, cerco di farvi capire il problema, sto cercando di fare una piccola applicazione che si interfaccia con un database formato da 3 tabelle per gestire il mio bilancio famigliare. Ho un form principale che poi tramite pressione di un button mi lancia altri form da cui gestisco inserimento, modifica e visualizzazione di dati di queste tabelle. Mi sono già arenato all'inizio, premetto che il fatto di usare wizard al posto di codice e capire quello che faccio mi ha decisamente spiazzato e qui arrivo al problema, ho il mio Dataset e il mio bel form nuovo e così ho preso e trascinato la tabella che mi interessa visionare all'interno del form e ho messo la DataGridView in sola lettura, il problema sta qui. La tabella è formata da un ID numerico autoincrementante e una descrizione che però non voglio che sia null, ho impostato la propietà nel dataset però succede questo, se aggiungo tramite il tasto + che si forma con la navigationbar automatica premo più e più volte il tasto e mi si formano x valori vuoti, quindi con testo a null, premo il tasto SALVA e mi da errore perchè ovvialemente non accetta valori NULL nel database, la cosa poi più grave è che quando sto aggiungendo nuovi record sempre con la pressione del + e mi sposto nel database mi appare un altro errore che mi avvisa che quel campo non può essere impostato come DBNULL.
Come posso risolvere questo problema ? Grazie per la pazienza.

P.S. più precisamente l'errore è il seguente nonullallowedexception non è stata gestita

Cteniza Profilo | Guru

Le regole presenti nel database possono essere diverse dalle regole presenti nel datatable quindi ti consiglio di verificare la struttura del datatable e confrontarla con la struttura / proprietà campi della tabella del database da cui hai derivato il dataset.

plaguebreath Profilo | Junior Member

Prima di tutto grazie per la risposta, ho controllato ora la corrispondenza dei campi tra database e dataset ed è perfettamente speculare, quel campo non deve accettare valori null, però l'errore mi capita se io compio questa operazione, aggiungo tramite il navigationbar creato automaticamente un record, l'id ovviamente si autoaggiorna e il testo DESCRIZIONE è vuoto, ora io come utonto decido di spostarmi indietro con l'apposito cursore indietro di un record e mi appare la fatidica schermata di errore con scritto:
La colonna 'Descrizione' non accetta valori null.
ecc ecc
non capisco, se sposto il record sembra come che mi esegua l'insert sul database anche se non dovrebbe farlo specialmente perchè il campo è errato, dove sbaglio ?
Grazie ancora.

Cteniza Profilo | Guru

Devi verificare se l'errore avviene quando dai il comando update del dataadapter / tableadapter oppure durante la gestione del datarow.
Verifica l'esattezza dell'eccezione, fai una ricerca su google con l'errore.

Anonimo Profilo | Senior Member

Domanda provocatoria e se provassi a scrivere codice senza il wizard e ti aiutiamo ti sentiresti più sicuro?
In ogni caso prima di effettuare l'update nel pulsante salva, intercetta l'evento e scorri così il DataTable e il problema anche se non in maniera elegante si risolve, ma devi comunque gestire il problema che si generano righe vuote.

foreach (DataRow dr in nomeDataTable.Rows) dr["DESCR"]=Convert.ToString(dr["DESCR"]);


Team Icon - Software Engineering
------------------------------
Unicredit Global Information Services Spa
Chief Solution Architect

plaguebreath Profilo | Junior Member

Grazie per le risposte, io sono sempre pronto a tutte le possibilità, ma sinceramente credo di essermi incasinato un po' tanto fra wizard che fanno tutto loro e cose di questo tipo. Se scrivessi del codice che mi porta ad un risultato e ne capisco anche il risultato ne sarei contento, facendo con il trascinamento e mettendo il datagridview nel form e la creazione automatica di tutti gli altri componenti invece non mi aiua a capire come muovermi negli inserimenti, aggiornamenti e update del database perchè non capisco ad esempio come funziona il tasto indietro nella navigationbar, se ci faccio doppio click sopra non ha nessuna riga di codice allora come fa a spostarmi il puntatore indietro di una riga ?
Per quanto riguarda il mio problema, il tasto salva al momento non centra perchè l'evento si scatena quando premo il tasto indietro nella navigation bar dopo aver ad esempio cliccato sul tasto aggiungi della nacigation bar e non aver inserito nessuna descrizione nel campo descrizione.
Grazie mille per l'aiuto se c'è da fare qualcosa io voglio provare a farla, c'è da rifare l'interfaccia di navigazione nel database ? Posso provare a rifare anche quella da zero ma mi manca un qualche esempio per poter capire come far funzionare il tutto.

Anonimo Profilo | Senior Member

Allora per navigare i dati e accedere a un form di modifica direi che un gridview o un datagrid vanno benissimo.
il form con delle textbox e delle label come edichette è semplice ed essenziale e funziona bene.

Quindi per prima cosa devi al caricamento del form con l'elenco dei dati collegarti al db usando una stringa di connessione, qua trovi quanto ti serve:

http://www.connectionstrings.com/

ed usare la tecnologia ADO.NET per collegarti ai dati e manipolarli. Non è tremendo, ci si abitua in fretta. Una volta creato l'oggetto Connection si usa un oggetto command per dire al db cosa fare, nel tuo caso eseguire la query di estrazione dati. Usa la proprietà Fill per estrarre i dati in formato DataSet che anche se non performante è molto intuitivo perchè ti riporta i dati come fosse un foglio excell.
A questo punto associ il dataset alla proprietà DataSource e usi il metodo DataBind() per vedere come per magia tutti i dati formattati nella tabella. La tabella per ora impostala con la proprietà AutoGenerateColumn a true.
Il GridView espone anche le proprietà per gestire da solo la modifica dei dati.
Creati un form a parte dove visualizzi un maschera per l'inserimento di un nuovo record e scrivi la stringa SQL di insert: INSERT INTO NOMETABELLA(ELENCO CAMPI) VALUES (VALORE CAMPI), l'associ all'oggetto command creato prima ed esegui di nuovo e il gioco è fatto.

Il consiglio che ti do è data questa spolverata generale inizia ad abbozzare qualcosa e man mano che incontri piccoli problemi noi siamo qui per aiutarti a capire, tanto ci siamo passati tutti e darsi una mano a vicenda per imparare è la cosa migliore.


Team Icon - Software Engineering
------------------------------
Unicredit Global Information Services Spa
Chief Solution Architect

plaguebreath Profilo | Junior Member

Appena torno a casa do un occhio al codice e riprovo ancora, grazie per i consigli c'è molo da imparare ;)

Cteniza Profilo | Guru

Magari questo mio esempio che non usa il wizard ti può far piacere.
http://community.visual-basic.it/lucianob/archive/2005/11/19/16583.aspx

plaguebreath Profilo | Junior Member

Ciao Luciano ho letto ieri sera il tuo esempio e preciso che sono un principiante quindi ci ho capito poco, però gli dò un altra studiata dopo e provo a farci qualcosa, gli esempi di interfaccia come questa mi piacciono molto, grazie.
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