【问题标题】:Is there a way to programatically extract all record IDs from a filtered (server-side) datatables recordset?有没有办法以编程方式从过滤的(服务器端)数据表记录集中提取所有记录 ID?
【发布时间】:2018-03-26 12:18:12
【问题描述】:

在服务器端模式下使用数据表,并使用 YADCL 进行过滤,有什么方法可以以编程方式提取记录 ID(例如 第 0 列包含这些 ID)用于整个过滤的记录集(不仅仅是显示的分页结果),这样我就可以对该记录集执行操作。

示例:“客户”数据库表包含 80k 条记录,我使用 YADCF 过滤将其缩小到 1k 客户的记录集,其中 20 个显示在网页上。我想在页面上有一个标记为“标记所有过滤记录”的按钮,单击该按钮会触发一个 ajax 脚本,该脚本将过滤后的 1,000 条记录上的“标记”字段从 0 更改为 1。

我可以独立于数据表处理记录的标记,但我不知道如何以编程方式确定哪些记录需要标记,即我需要提取某种形式的记录集标识,然后我可以使用它来定位我的 SQL更新动作。有什么想法吗?

【问题讨论】:

  • 您是否在服务器端添加了一些与 yadcf 相关的代码? yadcf_data_0 / yadcf_data_1 / 等等?就像在陈列柜上指定的yadcf-showcase.appspot.com/server_side_source.html
  • 是的,我有 Daniel,但除非我遗漏了什么,否则我看不出这与我的问题有什么关系。我想出了一个解决方法,通过捕获、解析和清理过滤期间使用的 SQL 查询(在 SSP 中),将其存储为会话 var,然后在“标记”操作期间使用它,但这需要做很多工作而且我仍然很想知道是否有更简单的方法来提取未分页的过滤记录集。我不需要这样的记录 ID,但我确实需要知道哪些记录属于记录集。通过捕获 SQL 查询的 WHERE 元素,我得到了一个可行的解决方案。
  • 听起来您的问题与 yadcf 过滤行为无关
  • 是的,因为 yadcf 正在对表进行过滤以生成过滤后的记录集。然后它以分页形式显示该记录集。我的问题是,是否可以以编程方式提取或引用整个过滤记录集,以便可以对整个过滤记录集执行更新操作?如果答案是否定的,那么很公平(我已经创建了一个解决方法),但这是我的问题,谢谢 :)
  • 好的,很公平,谢谢丹尼尔。我在服务器端所做的一切都是从 github 的示例 SSP 脚本大量扩展而来的,而数据表、yadcf 和 SSP 之间的界限在我的脑海中有点模糊。也就是说,我已经为数据表和 yadcf 标记了这个问题,并且正在寻求任何方面的帮助。因此,总而言之,我寻求的功能取决于我要添加的功能,无论如何我已经完成了,它工作正常。感谢您抽出宝贵时间回复,再次感谢 YADCF,它已成为我最新业务应用程序的重要核心组件。

标签: datatables datatables-1.10 yadcf


【解决方案1】:

我遇到了类似的问题,这就是我所做的:

  • 添加了一个隐藏的输入字段
  • 使用 Datatables 的 drawCallback 选项触发一个函数,该函数将所有活动(过滤)记录的 ID 写入该输入字段
  • 关于对服务器的回调,包括该输入字段的内容

棘手的细节是 drawCallback 函数:

function (settings) {                                                              
dtObj = this.api();                                                                
var dtData = dtObj.column(0,{ search: 'applied', selected: true }).data().toArray();   
$("#dtdata").val(JSON.stringify(dtData));                                          
}                                                                                  
  • column-call 的第一个参数是您感兴趣的列的索引(0 是我的索引)
  • 第二个参数选择匹配搜索/过滤条件的所有行。它们还可以与 yadcf 过滤一起使用!

【讨论】:

  • 感谢您的建议和详细信息,但我关注的是整个过滤记录集的 ID,而不仅仅是显示的分页结果。正如我随后解释的那样,这不是我每次看到所需的 ID,而是能够完整地再现过滤后的记录集,以便我可以对该记录集采取行动。我想出了一个解决方法,通过捕获、解析和清理过滤期间使用的 SQL 查询(在 SSP 中),将其存储为会话 var,然后在不涉及数据表的后续操作中使用它。
  • 好的,很高兴你成功了。但只是为了记录:我的建议是返回表中记录的所有ID,不受分页限制。
  • 我很抱歉 MBaas,但是因为你说:“......写了所有显示记录的 id......”并且 DT 文档示例说:“......输出数据可见的行......”,我以为你误解了我的问题。在这种情况下,即使我已经通过其他方式解决了我的问题,我也会接受你的回答,并表示歉意。
  • 谢谢。我发现我的回复具有误导性,因此更改了措辞。
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 2020-02-19
  • 2015-11-30
  • 2013-09-20
  • 2021-12-01
  • 2021-11-03
  • 2016-08-27
  • 2021-02-18
相关资源
最近更新 更多