2014-12-04 59 views
0

我有一個jqgrid(版本4.6.0.0),我在一個數量列的頁腳上顯示授予總數。如果用戶插入新行或刪除行,則應重新計算總量,並在頁腳上顯示它。它工作正常,直到網格爲空(沒有任何行),我的意思是如果用戶刪除網格上的最後一行,代碼仍然計算正確的金額(0),但頁腳仍然顯示它的總數量,而不是0。 這裏是我的代碼:如果行爲空,jqgrid footervalue不正確

protected void Jqgrid1_DataRequested(object sender, JQGridDataRequestedEventArgs e) 
{ 
    DataSet _ds = (DataSet)Session["myApplicationForm"]; 
    DataTable dt1 = _ds.Tables[1] as DataTable; 
    CalcVoucherAmt(dt1); 
} 

private void CalcVoucherAmt(DataTable _dt) 
{ 

    decimal amtSum = 0; 
    foreach (DataRow dr in _dt.Rows) 
    { 
     amtSum += obj2decimal(dr["DETAIL_AMT"]); 
    } 
    Jqgrid1.Columns.FromDataField("DETAIL_AMT").FooterValue = amtSum.ToString(); 
} 

protected void Jqgrid1_RowAdding(object sender, Trirand.Web.UI.WebControls.JQGridRowAddEventArgs e) 
{ 
    DataSet _ds = (DataSet)Session["myApplicationForm"]; 
    DataTable dt1 = _ds.Tables[1] as DataTable; 
    dt1.PrimaryKey = new DataColumn[] { dt1.Columns["DATA_SEQ"] }; 
    DataRow row = dt1.NewRow(); 

    row["UNIQ_KEY"] = System.Guid.NewGuid().ToString(); 
    row["DETAIL_AMT"] = amt; //user input 

    dt1.Rows.InsertAt(row, dt1.Rows.Count); 
    Session["myApplicationForm"] = _ds; 

    Jqgrid1.DataSource = dt1; 
    Jqgrid1.DataBind(); 
} 

protected void Jqgrid1_RowEditing(object sender, Trirand.Web.UI.WebControls.JQGridRowEditEventArgs e) 
{ 

    DataSet _ds = (DataSet)Session["myApplicationForm"]; 
    DataTable dt1=_ds.Tables[1] as DataTable; 
    dt1.PrimaryKey = new DataColumn[] { dt1.Columns["DATA_SEQ"] }; 
    DataRow rowEdited = dt1.Rows.Find(e.RowKey); 

    rowEdited["DETAIL_AMT"] = amt; //user input 

    Session["myApplicationForm"] = _ds; 
    Jqgrid1.DataSource = dt1; 
    Jqgrid1.DataBind(); 
} 

protected void Jqgrid1_RowDeleting(object sender, JQGridRowDeleteEventArgs e) 
{ 
    DataSet _ds = (DataSet)Session["myApplicationForm"]; 
    DataTable dt1 = _ds.Tables[1] as DataTable; 
    dt1.PrimaryKey = new DataColumn[] { dt1.Columns["DATA_SEQ"] }; 
    DataRow rowToDelete = dt1.Rows.Find(e.RowKey); 

    if (rowToDelete != null) 
     dt1.Rows.Remove(rowToDelete); 

} 

和ASPX,代碼

<cc1:JQGrid ID="Jqgrid1" runat="server" Height="100%" Width="100%" AutoWidth="true" PagerSettings-PageSizeOptions="[]" 
     OnRowAdding="Jqgrid1_RowAdding" 
     OnRowEditing="Jqgrid1_RowEditing" 
     OnDataRequested="Jqgrid1_DataRequested" 
     OnRowDeleting="Jqgrid1_RowDeleting"> 
    </cc1:JQGrid> 

什麼想法?

回答

0

爲什麼你決定jqGrid「應重新計算總金額」自動?如果使用或刪除行插入行,則可以指定將在添加/刪除操作結束時調用的回調。在回調內部,您可以使用getCol重新計算總金額並使用footerData在頁腳中設置新值。

或者,您可以觸發reloadGrid,它將正確排序新數據,重新計算總量並將其放在頁腳行中。兩種方式都可以工作。

您發佈的代碼似乎與jqGrid有關係。它不顯示哪種編輯模式以及如何使用添加/刪除行。所以我不能給你更詳細的實施技巧。

+0

我發佈了原始代碼底部的添加/刪除代碼。你可以注意到我使用了asp.net webform,所以reloadGrid在這裏無法使用。希望你能給我一些建議。 – brandon 2014-12-05 14:25:42

+0

@brandon:你使用了你問題的'jqgrid'標籤。 jqGrid是**純JavaScript **解決方案。如果您使用一些ASP.NET WebForm,那麼您直接間接生成一些包裝。您應該打開HTML頁面的源代碼並查看您生成的JavaScript代碼。如果您想使用相同語言與其他人交談,則應使用JavaScript術語。 ''var grid = $(「#<%= Jqgrid1.ClientID%>」);''會爲你提供網格的jQuery包裝(參見[documentation]](http://www.trirand.net/documentation/aspnet/_2s90nukak .htm))和'grid.trigger(「reloadGrid」,[{current:true}]);'會重新加載。 – Oleg 2014-12-05 15:15:04

+0

我正在使用jqGrid for asp.net,它是一個webform控件,一個商業版本。 [www.trirand.net](http://www.trirand.net/demo/aspnet/webforms/jqgrid)。可能是我發佈的問題是一個錯誤? – brandon 2014-12-06 02:12:48