如果rows为空,则jqgrid footervalue不正确

时间:2014-12-04 15:31:47

标签: asp.net jqgrid

我有一个jqgrid(版本4.6.0.0),我在金额列的页脚上显示一个授权总额。如果用户插入新行或删除行,则应重新计算总金额,并在页脚上显示。它工作正常,直到网格为空(没有任何行),我的意思是如果用户删除网格上的最后一行,代码仍然计算正确的数量(0),但页脚仍然显示它的总量,而不是0。 这是我的代码:

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> 

任何想法?

1 个答案:

答案 0 :(得分:0)

为什么你决定jqGrid“应该自动重新计算总金额?”如果使用或删除行插入行,则可以指定将在“添加/删除”操作结束时调用的回调。在回调内部,您可以使用getCol重新计算总金额,并使用footerData在页脚中设置新值。

或者,您可以触发reloadGrid,它会正确排序新数据,重新计算总金额并将其放在页脚行上。这两种方式都有效。

您发布的代码似乎与jqGrid有关系。它不显示哪种编辑模式以及您如何使用添加/删除行。所以我不能给你更详细的实施技巧。