22 messaggi dal 17 ottobre 2008
Buonasera,
premessa d'obbligo che è da poco che mi sono accostato ad asp.net, ho un problema che non riesco a risolvere:

Ho creato una Gridview che acquisisce i dati da un database access la cui tabella possiede una chiave ed ho abilitato editing dei record.
Fin qui tutto ok.
ora ho bisogno di valutare cosa fà l'utente e alla modifica di un campo del record selezionato devo valutare sia i vecchi valori che i nuovi.
Ora per i vecchi valori ho risolto ma non riesco a catturare il valore del nuovo.
Ho provato sia con 'OnRowUpdated' che con 'OnRowUpdating' ma non riesco a farlo funzionare.
Posto il codice per maggiore chiarezza e ringrazio tutti per l'aiuto.

HTML
<form id="form1" runat="server">
<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="IdCalendario" DataSourceID="AccessDataSource1"
onselectedindexchanged="GridView1_SelectedIndexChanged"
OnRowEditing="RowEditata" AllowPaging="True" OnRowUpdating="DopoUpdated" >
<Columns>
Etc.etc.
.
.
.
.
.
</div>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="CustomValidator">*</asp:CustomValidator>
</form>



Il CODICE

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;




public partial class Prova : System.Web.UI.Page

{

private string NewRSq1;
private string NewRSq2;
private bool NewGiocata;
private string NewNote;
private string OldRSq1;
private string OldRSq2;
private bool OldGiocata;
private string OldNote;

protected void Page_Load(object sender, EventArgs e)
{
}



protected void DopoUpdated(object sender, GridViewUpdatedEventArgs e)
{
// COME CATTURO UN CAMPO DEL RECORD????

NewRSq1 = GridView1.........;

CustomValidator1.Text = "Campo DopoUpDate " + NewRSq1.Trim() ;
CustomValidator1.IsValid = false;

}


protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{

CustomValidator1.Text = "Campo SelectChanged ";
CustomValidator1.IsValid = false;
}
protected void RowEditata(object sender, GridViewEditEventArgs e)
{

// Questa funziona
OldRSq1 = this.GridView1.Rows[e.NewEditIndex].Cells .Text;


CustomValidator1.Text = "Campo RowEditata " + OldRSq1.Trim() ;
CustomValidator1.IsValid = false;
}



}
652 messaggi dal 21 gennaio 2007
Contributi
per confrontare valori vecchi con quelli nuovi, devi gestire l'evento RowUpdating e avvalerti delle collezioni OldValues e NewValues della classe GridViewUpdateEventArgs.

ti lascio un esempio:

void gridView1_RowUpdating(Object sender, GridViewUpdateEventArgs e)
{
    //vecchi valori
    foreach (DictionaryEntry entry in e.OldValues)
    {
      string prova = String.Format("{0}", e.OldValues[entry.Key]);
    }

    //nuovi valori
    foreach (DictionaryEntry entry in e.NewValues)
    {
      string prova = String.Format("{0}", e.NewValues[entry.Key]);
    }
}
22 messaggi dal 17 ottobre 2008
Ciao.
Grazie
funzione e compila corretamente ma non mi da alcun valore sia nel vecchio che nel nuovo.
In pratica andando passo passo nella variabile mette tutti valori dei campi ma quando esce dal foreach la variabile si porta a valore "".
Come intercetto il campo che mi interessa senza dover controllare la sequenza e attraverso un contatore ?
Non c'è un metodo per catturare il campo attraverso il suo nome una volta editata la riga e dare alla mia variabile direttamente il valore sia esso vecchio che nuovo del campo che mi interessa?
Grazie


Il codice

void DopoUpdated(Object sender, GridViewUpdateEventArgs e)
{
//vecchi valori
foreach (DictionaryEntry entry in e.OldValues)
{
OldRSq1 = String.Format("{0}", e.OldValues[entry.Key]);
}
// esce dal foreach con vlore nullo

//nuovi valori
foreach (DictionaryEntry entry in e.NewValues)
{
NewRsq1 = String.Format("{0}", e.NewValues[entry.Key]);
}
// esce dal foreach con valore nullo


CustomValidator1.Text = "Campo DopoUpDate " + OldRSq1.Trim() + " ----- " + NewRSq1.Trim() ;
CustomValidator1.IsValid = false;
}


Modificato da Nicky il 21 ottobre 2008 10.03 -
652 messaggi dal 21 gennaio 2007
Contributi
certo che c'è..
il mio era un esempio per farti vedere le strutture che devi utilizzare.
per prendere il valore di un singolo campo basta che fai:

void DopoUpdated(Object sender, GridViewUpdateEventArgs e) 
{ 
string vecchioValore = String.Format("{0}", e.OldValues["TUACOLONNA"]); 
string nuovoValore = String.Format("{0}", e.NewValues["TUACOLONNA"]); 
}
22 messaggi dal 17 ottobre 2008
Grazie.
Non ci ero proprio arrivato.
A presto

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.