22 messaggi dal 03 ottobre 2009
ho un dataview (ricavato da un DataTable) che collego ad un controllo Listview tramite la proprietà DataSource.

ho dei problemi quando faccio delle modifiche direttamente al dataview tramite il Listview, nel senso che se seleziono un riga e poi eseguo un metodo che modifica i dati di questa riga e della riga successiva alle volte effettua le modifiche alle volte no, non capisco il problema si presenta a random...

per vedere direttamente l'esempio andate su www.andrearestucci.name, troverete un tabella le cui righe sono selezionabili, dopo averne selezionata una cliccate sul pulsante "aumenta posizione".
vedrete che la riga scende di una posizione.
Praticamente quando cliccate il pulsante "aumenta posizione" il contenuto della cella (colonna precedenza) viene copiato alla riga di sotto e viceversa, praticamente vengono invertiti i valori della riga selezionata e quella di sotto (solo i valori della colonna precedenza). Visto che il DataView è impostato con ordinamento sulla colonna "precedenza", dopo aver fatto lo scambio la riga selezionata scende di una posizione.

Fin qui tutto bene se non per il fatto che ogni tanto l'operazione al click del pulsante "aumenta posizione" non viene eseguita, sinceramente non capisco in base a che cosa.

Se la stessa cosa viene fatta utilizzando un DataTable invece che un DataView funziona regolarmente, quindi il problema sembrerebbe essere legato al DataView... Ho provato ad usare anche controlli Databound divrsi tra cui GridView e Repeater ma succede la stessa cosa.

Preciso che il dataview in questione viene caricato e modificato dall'oggetto session
Modificato da andrestu il 29 dicembre 2009 21.58 -

Andrea Restucci - Web Programmer
www.andrearestucci.name
Download and try my FREE custom controls !!!
senza codice è difficile dire a priori dove stai commentendo un errore, il DataView è una vista è ha dei comportamenti diversi dal DataTable.

posta del codice che ritieni rappresentativo e lavoriamo su quello

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
22 messaggi dal 03 ottobre 2009
ok questo è il contenuto del metodo legato al pulsante che cambia i valori e cioè il pulsante "aumenta posizione" (vedi spiegazione precedente)

protected void BtnAumenta_Click(object sender, EventArgs e)
{
DataView MyDW = (DataView)Session["DataView_CtrlList"];

int selInd = ListView1.SelectedIndex;
int selIndSucces;

if (selInd == (MyDW.Count - 1))
{
selIndSucces = selInd;
}
else
{
selIndSucces = selInd + 1;
}

Int16 precSel = (Int16)MyDW[selInd].Row["precedenza"];
Int16 precSuc = (Int16)MyDW[selIndSucces].Row["precedenza"];

MyDW[selInd].Row["precedenza"] = precSuc;
MyDW[selIndSucces].Row["precedenza"] = precSel;


ListView1.SelectedIndex = selIndSucces;
ListView1.DataBind();
}

spiegazione:

-imposto MyDW sul dataview memorizzato nella sessione (lo stesso che nel page load attribuisco come datasource del listview)

-recupero l'index del listview selezionato (cioè la riga selezionata)

-imposto anche un campo sull'indice della riga successiva (l'iterazione if else serve in caso se l'indice della riga selezionata corrispondesse all'ultima riga quello successivo viene impostato sempre sull'ultima riga, per non sforare)

-creo due campi dove memorizzo i valori delle due righe in questione

-inverto i valori delle due righe corrispondenti alla colonna precedenza

-assegno al list view l'index successivo questo perchè invertendo i valori della colonna precedenza l'elemento selezionato dopo la modifica scende di un posto (dato che il dataview è ordinato sulla colonna precedenza)

-faccio nuovamente il bind del listview

Il fatto è che l'anomalia accade a random, come se fosse inerente all'utilizzo di qualche cache penso... altrimenti non so cosa pensare

Preciso che le stesse operazioni fatte utilizzando un Datatable (all'interno di un dataset) non danno questo tipo di problema, però sono costretto ad usare un dataview per poter ordinare la tabella sulla colonna precedenza

Andrea Restucci - Web Programmer
www.andrearestucci.name
Download and try my FREE custom controls !!!
il fatto che usando il DataTable non si presenta l'errore esclude prima la chache lato browser o lato server.

hai provato ad inserire un punto di interruzione su BtnAumenta_Click?

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
22 messaggi dal 03 ottobre 2009
guarda ho provato a fare il debug e mettere un punto di interruzione ma non noto differenze di esecuzione tra quando funziona e quando non funziona.

I campi vengono valorizzati in ogni caso, le uniche righe su cui non riesco a vedere gli effetti tramite il debug sono:

MyDW[selInd].Row["precedenza"] = precSuc.ToString();
MyDW[selIndSucces].Row["precedenza"] = precSel.ToString();

forse le più importanti, ma dato che avvengono dentro l'oggetto MyDW non riesco a vedere l'effettiva operazione...

Ci sono altri modi o altre classi che posso usare al posto di un dataview (ricavato da un datatable) dove posso ordinare gli elementi in base ad una colonna? e magari anche collegare ad un controllo databound?

Andrea Restucci - Web Programmer
www.andrearestucci.name
Download and try my FREE custom controls !!!

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.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC