9 messaggi dal 17 ottobre 2003
Ciao a tutti,

ho realizzato una gridview con paginazione che legge i dati da un file XML, riesco a modificare ed eliminare i record della prima pagina.
Il problema si verifica quando tento di modificare o eliminare un record presente nelle altre pagine; dopo l'update viene modificato o eliminato il record presente nella prima pagina nella stessa posizione.
Per essere piu' chiaro, se modifico il primo record della seconda o terza pagina verra' modificata (con i dati appena inseriti) il primo record della prima pagina.

Di seguito il codice da me utilizzato:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
String st = Server.MapPath("docs/File.xml");
            DataSet ds = new DataSet();
            ds.ReadXml(st);
            ds.Tables[0].Rows[e.RowIndex][1] = ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("TextBox2"))).Text;
            ds.Tables[0].Rows[e.RowIndex][2] = ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("TextBox4"))).Text;
            GridView1.EditIndex = -1;
            ds.WriteXml(st);
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            String st = Server.MapPath("docs/File.xml");
            DataSet ds = new DataSet();
            ds.ReadXml(st);
            ((GridView)sender).PageIndex = e.NewPageIndex;
            ((GridView)sender).DataSource = ds;
            ((GridView)sender).DataBind();
        }


Credo che sull'evento GridView1_RowUpdating dovrei dirgli in qualche modo la pagina corrente della griglia, che potrei ottenere semplicemente tramite:

int currentPage = GridView1.PageIndex;


ma non sono riuscito a trovare il modo.

Vi ringrazio in anticipo e attendo fiducioso.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

websnake ha scritto:

dovrei dirgli in qualche modo la pagina corrente della griglia

sì, l'intuizione è giusta, sei già riuscito a calcolare l'indice? Prendi in considerazione questi 3 valori:
  • L'indice della pagina corrente (GridView1.PageIndex)
  • Il numero di righe per pagina (GridView1.PageSize)
  • L'indice della riga corrente (e.RowIndex o GridView1.EditIndex)

Dunque prova a calcolarlo in questo modo:
  var indiceCalcolato = GridView1.PageIndex * GridView1.PageSize + e.RowIndex
  //...e qui lo usi per arrivare alla giusta DataRow
  ds.Tables[0].Rows[indiceCalcolato][1] = ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("TextBox2"))).Text;
}


Però l'ideale sarebbe assegnare un attributo ID univoco ad ogni nodo XML, ed usarlo come fosse una chiave primaria.
Altrimenti, se più utenti lavorano contemporanemanete all'applicazione e inseriscono o rimuovono elementi allo stesso momento, è possibile che durante l'aggiornamento tu vada ad agire su un nodo diverso, dato che il suo indice nel frattempo è cambiato.

ciao
Modificato da BrightSoul il 11 giugno 2013 23.52 -

Enjoy learning and just keep making
9 messaggi dal 17 ottobre 2003
Perfetto! Grazie mille, ora funziona!
Non avevo pensato alla moltiplicazione GridView1.PageIndex * GridView1.PageSize.
Per quanto riguarda il problema del multi utente non l'ho considerato, non sto qui a spiegarti tutto ma il file XML viene creato per ogni utente.
Grazie ancora!

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.