0

当我的数据库没有返回任何内容时,我试图隐藏整个列,但它仍然将数据库字段(例如 {something})视为有效输入。

$('#mytable th').each(function(i) {
  var remove = 0;

var tds = $(this).parents('table').find('tr td:nth-child(' + (i + 1) + ')')
tds.each(function(j) {
  if (this.innerHTML == '') remove++;
});
if (remove == ($('#mytable tr').length - 1)) {
  $(this).hide();
  tds.hide();
 }
});

https://jsfiddle.net/wwmyxp9o/9/

这是它的正面现在的样子:

在此处输入图像描述

我已经根据Stephen Walcher的代码 删除/隐藏表的空列(包括 <th> )尝试了此代码 ,但仍然没有运气。

我刚刚开始做这种规模的事情,我很感激对这个问题的任何帮助。

谢谢,

Z

4

1 回答 1

0

Z - {fields} 在 HTML 中用于 Codecharge 模板,因此 jsfiddle 中的 Jquery 不起作用(因为那里有东西) - 看起来每个模板字段后面都有一个空格,这也不是什么都没有(所以this.InnerHTML == ''不会是真的)

我使用了 jsfiddle 并提出了一些可能有帮助的更改:

  1. Codecharge 在发布之前不会正确布局 HTML - 所以结束</table>标记实际上是中间表并且会混淆 jquery
  2. 分隔符和页脚行都使用'colspan = 55',当我删除它们(并将结束</table>标记移到末尾)时,它适用于测试列。

或者,在服务器端,您可以在每列周围添加 Codecharge 面板(这是 Grid Builder Wizard 中的一个选项,可以为您节省大量时间),您可以根据值单独将它们设置为“panelname6.Visible = false”。

使用 BeforeShowRow 标记每个列号,然后使用 Grid BeforeShow 事件中的自定义代码循环并隐藏面板。您还可以将要隐藏的列存储在隐藏字段中,并使用 jquery 使用与您正在使用的代码类似的代码来隐藏它们。

编辑网格选项 - 面板

Grid Builder 在流程后期有一些选项(我认为是第 7 步),允许您勾选“将面板添加到每列(用于隐藏/显示功能)”,这将在每列(和列标题)周围添加面板,以便您可以在后面的代码中打开和关闭它们。但是,由于它们应该被唯一命名,您也可以使用 jQuery 来关闭完整的列。

指定是否将所有控件放入以下类型的块中: <!-- BEGIN ControlType ControlName --><!-- END ControlType ControlName --> 它将用于动态隐藏/显示页面上的控件。

来自“Grid Builder”的 Codecharge 手册。

在后面的代码中设置列标记以关闭面板需要更多的工作,但类似于(伪代码):

BeforeShowRow
  $flagCol1Hide = ($flagCol1Hide OR $Container->col1Value->GetValue() > 0);
  $flagCol2Hide = ($flagCol2Hide OR $Container->col2Value->GetValue() > 0);
  //etc
end

BeforeShow
  // For the Grid (aka $Component in this case), with Panels as children
  $Component->PanelCol1->Visible = !$flagCol1Hide;
  $Container->PanelCol2->Visible = !$flagCol2Hide;
end

至于Totals,如果不能得到,也可以在BeforeShowRow中加入自己的totals,添加到BeforeShow的显示总数中。(请参阅“带有总计的简单报告”的 Codecharge 帮助)。

于 2016-05-26T03:37:00.013 回答