48 messaggi dal 23 maggio 2008
Salve a tutti ho un piccolo problema con il datagrid...

Attraverso delle funzioni visualizzo nel datagrid dei dati contenuti in un file xml

fin qui tutto OK.. dopo scrivo dell'altro codice per la modifica dei dati nel data grid e funziona benissimo...

Il problema viene fuori quando pagino il datagrid, la paginazione funziona ma adesso la modifica dei dati funziona solo in parte, cioè i dati visualizzati nella prima pagina li modifico tranquillamente ma quando modifico per esempio la descrizione della foto che sta nelle altre pagine non modifica il testo di quella foto ma di quella nella prima pagina che si trova nella stessa posizione...

Praticamente e come se la funzione che modifica i dati non si rendesse conto che
i dati sono paginati.

come faccio a risolvere?

Qui di seguito riporto il codice che ho scritto:

private void Page_Load(object sender, System.EventArgs e)
{
if ((!IsPostBack)) {
CreateDataSource();
}
}

public DataSet CreateDataSource()
{
XmlDataDocument mydata = new XmlDataDocument();
mydata.DataSet.ReadXml(Server.MapPath("images.xml"));

// paginazione con numero di pagina
mygrid.PagerStyle.Mode = PagerMode.NumericPages;
// numero di pagine da mostrare, seguono poi i ...
mygrid.PagerStyle.PageButtonCount = 5;

mygrid.DataSource = mydata.DataSet;
mygrid.DataBind();
return mydata.DataSet;
}

public void cambiapagina(Object sender, DataGridPageChangedEventArgs e )
{
mygrid.CurrentPageIndex = e.NewPageIndex;
lblRisultati.Text = "Pagina " + (e.NewPageIndex + 1);
CreateDataSource();
}
public void doCancel(object sender, DataGridCommandEventArgs e)
{
mygrid.EditItemIndex = -1;
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}

public void doEdit(object sender, DataGridCommandEventArgs e)
{
mygrid.EditItemIndex = e.Item.ItemIndex ;
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}

public void doUpdate(object sender, DataGridCommandEventArgs e)
{
mygrid.EditItemIndex = -1;
String didascalia = ((TextBox)e.Item.Cells[1].Controls[1]).Text;
DataSet ds = CreateDataSource();
DataRow row =ds.Tables[0].Rows[e.Item.ItemIndex];
row["details"] = didascalia;
ds.WriteXml(Server.MapPath("images.xml"));
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}

public void doDelete(object sender, DataGridCommandEventArgs e)
{
String Foto = ((Image)e.Item.Cells[0].Controls[1]).ImageUrl;
mygrid.EditItemIndex = -1;
DataSet ds = CreateDataSource();
DataRow row = ds.Tables[0].Rows[e.Item.ItemIndex];
row.Delete();
String filePathFoto;
filePathFoto = Server.MapPath(Foto);
File.Delete(filePathFoto);
ds.WriteXml(Server.MapPath("images.xml"));
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}
}
Ciao,

dovresti semplicemente settare DataKey nel GridView
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datakey.aspx

e poi intercettare il "selecteddatakey" per procedere alla modifica, cancellazione del record.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.selecteddatakey.aspx

Fabrizio Canevali

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.