【问题标题】:How to populate/present added datatables row with data?如何用数据填充/呈现添加的数据表行?
【发布时间】:2016-07-06 16:43:54
【问题描述】:

我正在使用 datatables.net 插件执行一些 ASP.NET gridview 转换。我为什么要这样做的答案更多地涉及并且可以辩论。但是,我需要一些帮助来解决我遇到的问题之一。

使用Javascript转换页面上的gridview其实很简单,效果很好。主要问题是我希望在数据表的主体内有一个固定的“总”行(页脚),以便它像表的其余部分一样保持响应。

我尝试使用代码隐藏添加页脚,我可以用总数据填充该页脚,但它对表格的其余部分没有响应。我假设是因为<tfoot><tbody> 之外。

使用 javascript,我已经成功添加了一个新的数据表行,并且可以将数据输出到控制台,但是我无法使用对象数据填充添加的行。

Javascript:

var sum;
$(document).ready(function () {
var table = $('#cphPage_gvTaxColl').DataTable();

//convert string to int
var intVal = function (i) {
    var j = $("<span/>");
    var txt = j.html(i).text();

    //        alert('txt :' + txt);

    var myVal = typeof txt === 'string' ?
        parseFloat(txt.replace(/[^\d.-]/g, '')) :
        typeof txt === 'number' ?
            i : 0;
    return myVal || 0;
};

//format integer as currency
var formatSum = function (myVal) {
    return accounting.formatMoney(myVal, {
        symbol: "$",
        precision: 2,
        thousand: ",",
        decimal: ".",
        format: {
            pos: "%s %v",
            neg: "%s (%v)",
            zero: "%s  0.00"
        }
    });
};

//add total row and determine index
table.row.add(['GRAND TOTAL']).draw();
var total_row = (table.row().count() + 1);
var total_col = (table.row(total_row).column().count + 1);

//alert
console.log('total row: ' + total_row);

//loop columns
table.columns('.sum').every(function () {
    sum = this
        .data()
        .reduce(function (a, b) {
            console.log('adding ' + intVal(a) + ' and ' + intVal(b));
            return intVal(a) + intVal(b);
        });

    //alert
    console.log('sum: ' + sum);

    console.log('column row 2 val: ' + this.data().row([2]));

    $(this.cell.node( total_row )).html(
                formatSum(sum)
            );

});
});

如何在数据行中呈现对象数据?

我还收到以下错误消息,我不确定缺少哪个参数(第 2 列和第 3 列为空):

Error message

我已经包含了控制台数据的屏幕截图,如果您需要,我可以提供 .aspx 标记:

Page + cosole log output

我仍在学习这些东西的来龙去脉。非常感谢您提供的任何指导。

提前致谢!

【问题讨论】:

    标签: javascript jquery asp.net gridview datatables


    【解决方案1】:

    这是我的解决方案:

    1. datatables 的 html 表应该有 &lt;tfoot&gt;

    类似这样的:

    <table id='table'>
        <tbody>
            <tr><td></td></tr>
        </tbody>
        <tfoot>
            <tr><td></td></tr>
        </tfoot>
    </table>
    
    1. 定义footerCallback字段

    Datatables初始化:

    $('#table').dataTable({
    ...
      "footerCallback": _footerDrawn
    ...
    });
    
    1. footerCallback:

    我使用服务器端数据,所以我的页脚数据源只是 ajax-response 的另一个字段:

    _footerDrawn: function( row, data, start, end, display ) {
      var table = $('#table').dataTables();
      var json = table.api().ajax.json();
        // assign values to each cell of the footer from json.total array
        $.each( table.api().columns().indexes(), function( index ) {
          $( table.api().column( index ).footer() ).html( json.total[index] );
        });
      }
    }
    

    json.total 包含要在footer 行中打印的字符串数组

    【讨论】:

    • 我在代码隐藏的 gridview 中创建了一个 tfoot,但我未能使 tfoot 响应。这里的问题是我正在对列数据求和,因为 gridview 是根据搜索参数动态填充的,所以我可以有 1-n 行数据。我将尝试使用 footercallback,但就像我说的那样,我没有成功使存在的 tfoot 响应,就像数据表由于某种原因不包括 tfoot。感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2019-01-29
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多