【问题标题】:jqgrid footervalue not correct if rows is empty如果行为空,jqgrid 页脚值不正确
【发布时间】:2014-12-04 15:31:47
【问题描述】:

我有一个 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> 

有什么想法吗?

【问题讨论】:

    标签: asp.net jqgrid


    【解决方案1】:

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

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

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

    【讨论】:

    • 我将添加/删除代码贴在原始代码的底部。你可以注意到我使用的是 asp.net webform,所以 reloadGrid 在这里不可用。希望你能给我一些建议。
    • @brandon:您在问题中使用了jqgrid 标签。 jqGrid 是纯 JavaScript 解决方案。如果您使用一些 ASP.NET WebForm,那么您会直接或间接地生成一些包装器。您应该打开 HTML 页面的源代码并查看您生成的 JavaScript 代码。如果您想与使用相同语言的其他人交谈,您应该使用 JavaScript 术语。 var grid = $("#&lt;%= Jqgrid1.ClientID %&gt;"); 将为您提供网格的 jQuery 包装器(请参阅the documentation),grid.trigger("reloadGrid", [{current: true}]); 将重新加载。
    • 我正在使用 jqGrid for asp.net ,它是一个 webform 控件,一个商业版本。 www.trirand.net。可能是我发布的问题是一个错误?
    • 这里是来自trirand的示例代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2015-12-11
    • 2020-12-31
    • 2019-11-27
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多