Background
Problemi
- Se chiamo la pagina senza parametro da QueryString (e quindi vado in
inserimento), inserisco i dati e salvo, la FormView va in
EmptyDataTemplate
- Se vado in modalità inserimento partendo dall'ItemTemplate di un altro
record, dopo aver inserito i dati di quello nuovo mi torna al record che stavo
visualizzando prima.
Comportamento desiderato
Indipendentemente dal percorso seguito per inserire il nuovo record vorrei
che dopo averlo inserito la FormView restasse su quel record andando in
ItemTemplate, cioè visualizzando i dati che ho appena inserito.
Soluzione
Nel DataSet designer aggiungo una nuova query di inserimento che
ritorni il valore Identity del record appena inserito al TableAdapter
in questione:
- Click destro nel DataSet designer su ClientiTableAdapter
- Add query -> Use SQL Statements -> Insert query
- Ottengo una cosa di questo tipo (che è identica a quella generata
automaticamente)
INSERT INTO [Clienti] ([Nome], [Cognome])
VALUES (@Nome, @Cognome);
SELECT IdCliente, Nome, Cognome
FROM Clienti WHERE (IdCliente = SCOPE_IDENTITY())
- Togliamo la seconda query e riscriviamo in questo modo:
INSERT INTO [Clienti] ([Nome], [Cognome])
VALUES (@Nome, @Cognome);
SELECT SCOPE_IDENTITY();
- Chiamiamo il metodo "InserisciCliente", lo salviamo e nelle sue proprietà
cambiamo l'ExcecuteMode da NonQuery a Scalar
- Ora andiamo al nostro ObjectDataSource e gli diciamo di utilizzare quel
metodo come inserimento (smart tag -> Configure DataSource)
- Nelle sue proprietà (tab eventi) facciamo doppio click sul campo Inserted
per creare un EventHandler appropriato. L'oggetto
ObjectDataSourceStatusEventArgs contiene una proprietà chiamata ReturnValue,
che guarda caso contiene proprio il valore IdCliente del record appena
inserito. Nel mio caso lo utilizzo per fare un redirect alla stessa pagina
passandoglielo come parametro di QueryString:
protected void ObjectDataSource1_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
Response.Redirect("DettagliCliente.aspx?IdCliente=" + e.ReturnValue, false);
}
powered by IMHO 1.3