Newsgroup: it.comp.lang.delphi
Titolo: Datagrid update procedure

ciao,
scusate, sono alle prime armi: come posso fare a fare un update sul 
datagrid? Questa è la procedura ke ho scritto, ma non funziona:
procedure ShowManager.DataGrid_UpdateCommand(source: System.Object; e: 
System.Web.UI.WebControls.DataGridCommandEventArgs);
const
  campi = 5;
var
  data: Array [0 .. campi-1] of string;
  i:integer;
  comando: IDbCommand;
  connessione: BdpConnection;
  transazione : IDbTransaction;
begin
  for i:=0 to campi-1 do
   data[i] := Textbox(e.Item.Cells[0].Controls[0]).Text; //MI DA ERRORE 
QUI
   connessione := BdpConnection.Create;
   connessione.ConnectionString := ConfigurationSettings.AppSettings.Get
('ConnectionString');
   connessione.ConnectionOptions := ConfigurationSettings.AppSettings.Get
('ConnectionOptions');
   connessione.Open;
   if connessione.State = ConnectionState.Closed then
   connessione.Open;
   try
     transazione := connessione.BeginTransaction;
     try
       comando := connessione.CreateCommand;
       comando.CommandText := 'update users set usr= '+ data[1] +', 
pwd= '+ data[2]+', nome= '+ data[3]+', cognome= '+ data[4]+' where 
id= '+data[0]+'';
       comando.ExecuteNonQuery;
        transazione.Commit;
        except
        transazione.Rollback;
        raise;
      end;
      finally
    end;
end;
--- posted by geoForum on 
http://www.delphiedintorni.it

)

)
Perfettamente ragione e mi scuso, mi si era semplicemente attivato il 
virus rpc (nn mi ricordo il nome) di win xp sul pc dov'ero e come saprai 
dopo 60 sec mi si spegneva il pc :) infatti non avevo nemmeno salutato.
Cmq l'errore č questo:
Description: An unhandled exception occurred during the execution of the 
current web request. Please review the stack trace for more information 
about the error and where it originated in the code. 
Exception Details: System.NullReferenceException: Object reference not 
set to an instance of an object.
in questa linea:
data[i] := Textbox(e.Item.Cells[0].Controls[0]).Text;
beh, spero di essere stato piů chiaro stavolta, grazie e tanti saluti
ciao


 beh, spero di essere stato più chiaro stavolta, grazie e tanti saluti
Da questa riga di istruzioni, suppongo che tu abbia a disposizione un 
DataGrid contenente diverse righe (elementi) delle quali vuoi ottenere 
dalla prima cella il primo controllo contenuto in essa, che a giudicare 
dal cast si tratterebbe di una TextBox...è corretto?
L'errore lascerebbe pensare che un riferimento non sia impostato; ad 
esempio, Item è nil, oppure lo è Cells[0] oppure l'elemento Controls[0]; 
dovresti eseguire la tua WebForm Application in modalità "debug", 
esaminando i valori riportati qui sopra e verificando che contengano un 
riferimento valido ad un oggetto, così come ti ha giustamente indicato 
la segnalazione d'errore.
Ad esempio, so che spesso si utilizzano tipi di elementi (righe) diversi 
all'interno della griglia: elementi di alternanza, righe specifiche per 
l'editing, righe che rappresentano la selezione e così via; dovresti 
verificare, attraverso la proprietà ItemType dell'elemento corrente 
(e.Item.ItemType), di quale tipo di elemento della griglia si tratta, 
poichè l'evento per il quale hai scritto il codice viene eseguito anche 
per le intestazioni di colonna, il piè di pagina e altro ancora.
E' ovvio che il tuo codice, eseguito per le intestazioni di colonna, non 
funziona perchè tale elemento (intestazione di pagina) non contiene la 
TextBox alla quale cerchi di fare riferimento.
Il controllo DataGrid è uno dei più potenti all'interno del .NET 
Framework, ma occorre studiarlo a fondo prima di addentrarsi nei 
dettagli; se non lo hai ancora fatto, ti suggerisco di scaricare la 
documentazione SDK del .NET Framework, che se non sbaglio dovrebbe 
essere accessibile anche dalla Guida in linea di Delphi 8 (non posso 
verificarlo, la mia trial è...scaduta, purtroppo). :-)
Spero di averti fornito indicazioni utili. Ciao!


grazie tante, sei stato chiaro!
Infatti nel debug l'oggetto "e" ha un null value... porca miseria!
Sě forse č proprio quello il prob.
Mi serviva x l'update di un datagrid... cmq ora provo a fare tutto a mano 
con sql. ciao e grazie tante!


 Infatti nel debug l'oggetto "e" ha un null value... porca miseria!
Uhm, questo non è proprio normale, poichè l'oggetto "e" rappresenta 
l'istanza di una classe appositamente progettata per contenere le 
informazioni sull'evento specifico, pertanto trovo sia strano che possa 
essere "nil"...spero che tu abbia avuto una svista nel debug e abbia 
identificato come nil una proprietà di /e/. :-)
In caso contrario, temo che tu stia facendo un uso errato 
dell'evento...magari lo stai richiamando direttamente dal codice.


ho risolto!
siccome nell'update leggeva le colonne della mia datagrid, e siccome la 
prima colonna del datagrid era la colonna con i comandi 
di "edit", "update" ecc, non riusciva a ricavare il nome da mettere nel 
cast sul textbox... x quello non andava!
č bastato fargli "saltare" la prima colonna cosě ed č tutto ok:
if e.Item.Cells[i].Controls[0] is Textbox then
      data[i] := (e.Item.Cells[i].Controls[0] as Textbox).Text
    else
      data[i] := '';
end;
il tuo aiuto cmq č stato fondamentale!
ciao


 end;
Forse č piů opportuno controllare semplicemente che l'indice non sia 0 
piuttosto che eseguire un cast, che si tratta comunque di un'operazione 
tendenzialmente lenta.
Ciao!
