【问题标题】:Assign ID to datatable row from json data从 json 数据中为数据表行分配 ID
【发布时间】:2013-04-09 03:53:49
【问题描述】:

我是数据表 jquery 插件的新手。 我被这个问题困住了超过 2 天。我有一个 Json 数据,我仍然无法加载表,我还想将第一列分配为行的 id

这里是html:

<table cellpadding="0" cellspacing="0" border="0" class="display"
    id="accDetailTable">
    <thead>
        <tr>
            <th>Currency</th>
            <th>Current/Savings Account No.</th>
            <th>Securities Account No.</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>

还有我的初始化

var oTable=$('#accDetailTable').dataTable( {
            "bProcessing": true,
            "bServerSide": true,
            "sAjaxSource": contextPath + "/user/investorAjax?method=getInvestorAccDetailList",
            "iDeferLoading": 57,
    } );

从服务器返回 jsonData:

    {"sEcho":1,"iColumns":4,"iTotalRecords":16,"iTotalDisplayRecords":16,
"aaData":
    [{"DT_RowId":2032,"currency":1,"currentAccNo":"aa","secureAccNo":"aa"},
    {"DT_RowId":2033,"currency":1,"currentAccNo":"111","secureAccNo":"111"},
    {"DT_RowId":2034,"currency":1,"currentAccNo":"a","secureAccNo":"aa"},
    ]}
}

但它总是命中:

DataTables 警告(表 id = 'accDetailTable'):添加的数据(大小未定义)与已知列数不匹配 (3)

【问题讨论】:

  • 如何添加另一个隐藏列来保存行ID?
  • 我尝试再添加一个标题 id 并将其样式设置为隐藏。但它显示:添加的数据(大小未定义)与已知的列数(5)不匹配。从 3 跳到 5 ,还是不知道为什么

标签: javascript datatables


【解决方案1】:

您的数据表正在等待每行三个条目,您给它四个。在您的表格声明(在 html 部分)中,在行的开头指定一个新的标题单元格 &lt;th&gt;。您将在其中放入 id。然后在 dataTables 初始化之后,您可以使用 fnSetColumnVis(index, visibility) 函数隐藏第一列:

oTable.fnSetColumnVis(0, false); //It will hide your first column

这样做每一行都包含他的 id (DT_RowId) 但不显示它。

【讨论】:

  • 其实我试试这个datatables.net/release-datatables/examples/server_side/ids.html。它表示使用 DT_RowId 属性,datatable 将自动将其添加为 的 Id。我认为错误不是 JsonData 的原因。
  • 在您给定的链接中,json 响应中未定义 iColumns 选项。你可以尝试删除它吗?
  • 和你的dataTables初始化中的adColumns定义?
  • 广告栏?你能给我一个exp吗,我不知道这个道具
  • aoColumns 抱歉,请尝试删除它,因为它在 dataTables 示例中不存在
【解决方案2】:

这很容易。做个小改动吧,既然要第一列包含id,可能需要用到fnRender,请check the api of datatables,这部分代码我没加:

var oTable=$('#accDetailTable').dataTable({
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": contextPath + "/user/investorAjax?method=getInvestorAccDetailList",
    "aoColumns":[
        {"mDataProp":"currency"},
        {"mDataProp":"currentAccNo"},
        {"mDataProp":"secureAccNo"}
    ]
});

【讨论】:

  • 谢谢,但我尝试像这样配置 datatables.net/release-datatables/examples/server_side/ids.html :给定列数据的名称 DT_RowId 但它不起作用。
  • 好吧,我觉得原因是你的json数据格式,看区别:"DT_RowId":2032 VS "DT_RowId":"row_9",参考这个:datatables.net/forums/discussion/8962/…
  • 我尝试了你的解决方案,但仍然:添加的数据(大小未定义)与已知的列数不匹配(3)
  • 目前我无法加载表格。
  • 我认为数据表无法识别您的数据格式,因此您提供 4 列数据时只有 3 ths。
猜你喜欢
相关资源
最近更新 更多
热门标签