16 messaggi dal 03 giugno 2004
Salve a tutti,
ho caricato un DataList dove visualizzo una serie di valori dal database.
Una volta ottenuti, devo assegnare questi valori ad una proprietà per aggiornare il database.
Come è possibile leggere i valori selezionati sul DataList?
Mi spiego meglio!
Nel DataGrid per assegnare alla proprietà tutti i valori selezionati faccio (e non solo io!) così:

private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
{
ItemProprieta item=new ItemProprieta(); item.ProdottoID=DataGrid1.SelectedItem.Cells[0].Text; item.ProdottoNome=DataGrid1.SelectedItem.Cells[1].Text;
}
e così via...
E' possibile fare la stessa cosa nel DataList?
Grazie fin d'ora e a presto
La differenza tra DataGrid e DataList è che nel secondo caso devi definire i template, mentre nel primo caso questo non è necessariamente vero.

Per fare quello che chiedi un'idea potrebbe essere quella di annidare dentro all'ItemTemplate della DataList dei controlli sui quali fare il binding durante la fase di caricamento dei dati.

Per leggere successivamente i dati nell'event handler della griglia puoi andarti a leggere i valori dei vari controlli annidati dell'item corrente.

In questo caso non ritengo SelectedIndexChanged l'evento giusto da gestire. E' meglio un ItemCommand se nell'item è presente un controllo che lancia un Command sulla DataList...

Ciao, Ricky.
Modificato da rickyvr il 09 aprile 2005 11.18 -

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
16 messaggi dal 03 giugno 2004
Grazie per la dritta!
Ecco come ho risolto (in maniera forse discutibile, ma funziona!):

private void Genera_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
if(Session["userId"]== null)
{
Server.Transfer("login.aspx");
}
else
{

Carrello itemp=new Carrello();
itemp.ProdottoID = DataList1.DataKeys[e.Item.ItemIndex].ToString();

//azzardo un recupero dal ViewState (meglio in questo caso la Cache.Insert?) e lo assegno al DataView
DataSet sData = (DataSet)ViewState["mioDataSet"];

DataView recuperoDati = new DataView(sData.Tables["NomeTabella"],"CodiceID=" +

itemp.ProdottoID,"Nome",DataViewRowState.CurrentRows);

foreach (DataRowView drCust in recuperoDati)
{
itemp.ProdottoNome = drCust[3].ToString();
itemp.Prezzo = Double.Parse(drCust[2].ToString());
}

itemp.Quantita=1;
int cust = (int)Session["userId"];
//a questo punto passo i valori assegnati alle proprietà al metodo AddItem
Carrello.AddItem(Session.SessionID,itemp,cust);

}

}
Se nel codice c'è qualche castroneria fatemelo sapere!
Ciao e a presto
Ecco un paio di considerazioni:

1. Vedo che ti fai a mano la gestione della sicurezza... Considera l'autenticazione tramite moduli.

2. MAI usare il viewstate per includere oggetti molto grossi come potrebbe essere un dataset. La soluzione giusta è usare la cache!

Per il resto non discuto, non conoscendo cosa faccia di preciso la tua applicazione.

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.