2014-12-04 65 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