我有一個gridview,我試圖保持狀態。目前我有它在哪裏用戶可以內聯編輯(從gridview內)。經常我得到這個工作:保持Gridview狀態
protected void GridViewTower_RowEditing(object sender, GridViewEditEventArgs e)
{
//Set the edit index.
GridViewTower.EditIndex = e.NewEditIndex;
//Bind/Re-LoadData data to the GridView control.
LoadData();
Populate();
}
protected void GridViewTower_CancelEditRow(object sender, GridViewCancelEditEventArgs e)
{
//Reset the edit index.
GridViewTower.EditIndex = -1;
//Bind/Re-LoadData data to the GridView control.
LoadData();
Populate();
}
問題是,我還有其他3個特徵,分類,可以過濾GridView的下拉菜單和一個按鈕搜索也過濾girdview。當在這三種模式中進行內聯編輯時,我無法控制gridview所處的狀態。在我的gridview標籤中,我將EnableViewState和ViewStateMode都設置爲true。
如何在這些模式下保持gridview的狀態?
public void LoadData()
{
if (Session["GridView"] != null)
{
GridViewTower.DataSource = Session["GridView"];
GridViewTower.DataBind();
//Response.Redirect("TowerManagement.aspx"); //
//Session["GridView"] = null;
}
else
{
WISSModel.WISSEntities context = new WISSModel.WISSEntities();
var tower = (from t in context.Towers
where t.isDeleted == false
select new
{
t.TowerId,
t.TowerName,
RangeName = t.Range.RangeName
}).ToList();
GridViewTower.DataSource = tower;
GridViewTower.DataBind();
ViewState["Sort"] = 0;
}
}
protected void Gridview_Sort(object sender, GridViewSortEventArgs e)
{
WISSModel.WISSEntities context = new WISSModel.WISSEntities();
var towers = (from t in context.Towers
where t.isDeleted == false
select new
{
t.TowerId,
t.TowerName,
rangeName = t.Range.RangeName
}).ToList();
DataTable gridviewTable = towers.CopyToDataTable();
gridviewTable.DefaultView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
GridViewTower.DataSource = gridviewTable;
GridViewTower.DataBind();
Session["GridView"] = GridViewTower.DataSource;
}
我會建議保留排序,篩選和搜索的三個隱藏字段以外的gridview值。在LoadData()中檢查這個值並在綁定gridview之前優化數據源。 – afzalulh
只是一個想法,但可以將數據源存儲在viewstate對象中嗎?像這樣:** ViewState [Gridview.Datasource,「currentGridView」]; ** – Neo84
這是可能的,但我不建議在視圖狀態保存數據源。每次回發都會將巨大的視圖狀態數據發送到服務器。 1)我會使用hiddenfield來存儲一些值並在每個回發中重新查詢數據源。 2)在最壞的情況下,我會將源保存到Session而不是視圖狀態。 – afzalulh