ciao,
gdalbell ha scritto:
Perchè? Non è giusto il tipo DataRow?
No, scusa, ho sbagliato io. Il tipo esatto sarebbe DataViewRow ma dimenticavo che la proprietà DataItem la trovi valorizzata solo se la leggi in corrispondenza dell'evento RowDataBound della GridView. Lascia perdere questa strada; avevi scritto giusto tu.
gdalbell ha scritto:
Per quanto riguarda il DataKeyNames il codice è
<asp:GridView DataKeyNames="id" runat="server" ... />
sì, è corretto e andava bene anche il codice che avevi scritto per recuperare l'id della riga dalla collezione DataKeys:
codaStampeSource.InsertCommand="INSERT INTO coda_stampe (id_distinta) VALUES("+distinteGrid.DataKeys(row.RowIndex).Value.ToString+")"
Ora, vado un po' alla cieca perché non ho sottomano il codice ma, ragionandoci meglio, penso che il problema dell'Index out of range' dipenda dal fatto che le righe della GridView cambino da prima a dopo il postback. Puoi confermare questa cosa?
E' come se inizialmente, nella GridView, ci fossero ad esempio 10 righe e poi, dopo il Postback, ne diventassero di più.
gdalbell ha scritto:
la Select della quale vado a comporla da code behind attraverso diversi valori di SelectParameters.
Ecco, probabilmente è questa la causa per cui il SqlDataSource, dopo il postback, restituisce più righe del normale. Ricorda che all'InitComplete i controlli non hanno ancora ripristinato il loro stato e quindi nella Select verranno adoperati valori sbagliati. Come dicevo un paio di post fa, sei costretto a leggere i valori dalla collezione Request.Form anziché dalla proprietà .SelectedValue o .Text dei controlli.
Dunque, i SelectParameters del SqlDataSource non dovrebbero essere degli asp:ControlParameter, bensì degli asp:FormParameter.
Effettuare il binding nell'InitComplete ha generato non pochi effetti collaterali ma, con un po' di consapevolezza su quello che succede nella pagina, riuscirai a venirne fuori.
Uno dei problemi legati all'uso degli asp:FormParameter è che potresti non riuscire a beccare i nomi giusti per FormField. Esamina l'HTML della pagina e controlla con che attributo
name vengono renderizzati i controlli usati per il filtraggio dei risultati. Quelli saranno i nomi da usare come FormField.
ciao
Modificato da BrightSoul il 30 maggio 2012 23.10 -