Aggiunta record a Datatable

martedì 27 agosto 2013 - 11.29
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server Express

alsa Profilo | Junior Member

Salve ragazzi,
sto iniziando a lavorare con ASP.NET da assoluto principiante e sto svolgendo qualche esercitazione da autodidatta ma sto incontrando un problemino durante l' utilizzo di un datatable.
In pratica nella mia pagina ho una gridview popolata con alcuni dati e questa gridview ha una colonna con un ButtonField. Al click sul Button voglio inserire solo 3 campi di quel record in un altra gridview, quindi ho creato una datatable con i 3 campi di cui necessito e l' ho collegata in binding alla seconda gridview e tutto funziona correttamente se la gridview di destinazione è vuota, mentre se devo aggiungere una seconda riga vedo scomparire la precedente.
Vi posto la parte di codice che popola la seconda gridview

If (e.CommandName = "Aggiungi") Then Dim index As Integer = Convert.ToInt32(e.CommandArgument) 'rosa è la Datatable 'calciatore è la Datarow calciatore("Ruolo") = GridView1.Rows(index).Cells(4).Text calciatore("Nome") = GridView1.Rows(index).Cells(2).Text calciatore("Mln") = GridView1.Rows(index).Cells(5).Text rosa.Rows.Add(calciatore) End If GridView2.DataBind()

Spero che possiate darmi una dritta.
Grazie

alx_81 Profilo | Guru

>Salve ragazzi,
ciao

>mentre se devo aggiungere una seconda riga vedo scomparire
>la precedente.
credo che il tuo problema sia all'atto del ricaricamento, momento in cui svuoti il datatable che avevi popolato. In quel momento devi fare in modo di non ripulire il datatable, anzi dovresti ricaricarlo coi dati appoggiati da qualche parte in precedenza, ad esempio in session.
Nell'evento di load in poche parole, puoi chiederti se in session esiste già un oggetto coi dati. In caso negativo, crei il tuo datatable vuoto e lo metti in session. All'evento di aggiunta vai ad aggiungere record all'oggetto. L'importante è che non ripulisci la struttura in load.

>Grazie
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

alsa Profilo | Junior Member

Grazie Alessandro,
sto seguendo il tuo consiglio ma, ovviamente, data la mia inesperienza mi sto scontrando con un "NullReferenceException" (Object reference not set to an instance of an object.) al momento di popolare la datatable, potresti dirmi dove sbaglio?

Subito dopo l' inserimento del record nel Datatable ho inserito questa riga di codice:
Session("salva") = rosa

Mentre nel Page Load ho aggiunto questo codice:

If Page.IsPostBack Then rosa = CType(Session("salva"), DataTable) End If

Scusami l' ignoranza

alx_81 Profilo | Guru

Mi diresti dove prendi l'eccezione? La riga esatta..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

alsa Profilo | Junior Member

Si scusami,
esattamente qui:

rosa.Rows.Add(calciatore)

alx_81 Profilo | Guru

Se quella riga da eccezione significa che il datatable è null..
postami tutto il codice in cui gestisci il datatable.
mi aspetto che alla load, se la pagina non é raggiunta da un postback (ovvero primo accesso) il datatable venga creato e messo in sessione (anche se esisteva già se meglio credi).
se invece siamo in postback, allora devi andarlo a leggere.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

alsa Profilo | Junior Member

Ho fatto qualche modifica e adesso funziona.
Nel Page_Load ho modificato il ciclo in cui controllo se è un postback, aggiungendo l' "Else" in questo modo:

If Page.IsPostBack Then rosa = CType(Session("salva"), DataTable) Else Session("salva") = rosa End If

e poi ho modificato la dichiarazione della datarow "calciatore" che prima dichiaravo così:

public calciatore as datarow = rosa.newrow

adesso la dichiaro così:

Public calciatore As DataRow

e la inizializzo subito prima di popolarla.

Grazie mille Alessandro, prezioso come sempre ;-)
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5