209 messaggi dal 23 agosto 2007
Ciao,

ho realizzato una gridView dove ogni riga e' direttamente modificabile, senza bisogno di usare l'EditButton.

Salvo il dataSource della GridView (come oggetto anonimo restituito da query Linq to SQL) nel ViewState.

Popolo la GridView al PageLoad e poi, se avvenisse un PostBack, vorrei salvare lo stato attuale della GridView con le eventuali modifiche fatte nel View state e ripopolare con questi dati la gridView "dopo" il postBack.

Il problema e' che al postBack la ViewState è null.

[1]Come potrei salvare lo stato attuale della GridView e reperirlo poi?

[2]Cliccando su un button, i dati inseriti o modificati andranno salvati. Quale è il miglior modo di tener traccia dei controls modificati in modo da fare l'UPDATE solo per questi?

Grazie in anticipo!

Il codice e' il seguente:
  
protected void Page_Init(object sender, EventArgs e)
{  
  if (Page.IsPostBack)  
 {  
  subEntityGridView.DataSource = new JavaScriptSerializer().DeserializeObject((string)ViewState["test"]);  
  subEntityGridView.DataBind();  
 }  
}  
  
protected void Page_Load(object sender, EventArgs e)
{    
  if (!Page.IsPostBack)   
  {  
   updateGridView();  
  }
}  
  
protected void Page_Unload(object sender, EventArgs e)
{    
ViewState["test"] = new JavaScriptSerializer().Serialize(subEntityGridView.DataSource);    
}  
  
private void updateGridView()
{    
object[] o = { 12, true, "test"};  
  
var data = (from d in o  
select new { JBSuitabilityID = o[0], WishToTrade = o[1], ExplainKnowledge = o[2] }).Take(1);  
  
subEntityGridView.DataSource = data.ToList();  
subEntityGridView.DataBind();  
}  
  
  
/*GRID VIEW*/  
  
<asp:GridView ID="subEntityGridView" runat="server"  
CellPadding="4" ForeColor="#333333" ShowFooter="True" Font-Size="Small" Width="100%" AutoGenerateColumns="False" AutoGenerateEditButton="false" AutoGenerateDeleteButton="false" EmptyDataText="No Entries Available" >  
<RowStyle />  
<Columns>  
<asp:BoundField DataField="JBSuitabilityID" HeaderText="SuitabilityAppropriatenessEntryID" Visible="False" />  
  
<asp:TemplateField HeaderText="Wish To Trade">  
<ItemTemplate>  
<asp:CheckBox ID="wistToTradeBox" runat="server" Checked='<%# Bind("WishToTrade") %>' />   
</ItemTemplate>  
</asp:TemplateField>  
  
<asp:TemplateField HeaderText="Explain Knowledge">  
<ItemTemplate>  
<asp:TextBox ID="ExplainKnowledgeTextBox" Text='<%# Bind("ExplainKnowledge") %>' Rows="5" runat="server" />  
</ItemTemplate>  
</asp:TemplateField>  
  
</Columns>  
</asp:GridView>  
paquito_ita wrote:
Il problema e' che al postBack la ViewState è null.

perchè tu la carica all'unload. prova ad abilitare il tracing sulla pagina e scoprirai perchè
un buon articolo per capire meglio come funzionare è questo: http://msdn.microsoft.com/en-us/library/ms972976.aspx

[2]Cliccando su un button, i dati inseriti o modificati andranno salvati. Quale è il miglior modo di tener traccia dei controls modificati in modo da fare l'UPDATE solo per questi?

potresti spiegare meglio questa domanda?
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

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.