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>