当我的数据库没有返回任何内容时,我试图隐藏整个列,但它仍然将数据库字段(例如 {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 的代码的代码 remove/hide table's empty column(s), including <th> ,但仍然没有运气。
我刚刚开始做这种规模的事情,我感谢对这个问题的任何帮助。
谢谢
Z
最佳答案
Z - {fields} 在 Codecharge 模板的 HTML 中,因此 jsfiddle 中的 Jquery 将无法工作(因为那里有东西) - 而且看起来每个模板字段后面都有一个空格,也不是 Nothing(因此 this.InnerHTML == ''
不会为 true)
我玩了 jsfiddle 并提出了一些可能有帮助的更改:
- Codecharge 在发布之前不会正确布局 HTML - 因此结束
</table>
标签实际上是中间表,会混淆jquery - 分隔符和页脚行都使用“colspan=55”,当我删除它们(并将结束
</table>
标记移至末尾)时,它适用于测试列。
或者,在服务器端,您可以在每列周围添加 Codecharge 面板(这是网格生成器向导中的一个选项,这将为您节省大量时间),并且您可以根据值(value)观。
使用 BeforeShowRow 标记每个列号,然后在 Grid BeforeShow 事件中使用自定义代码循环并隐藏面板。您还可以将要隐藏的列存储在隐藏字段中,并使用 jquery 来隐藏它们,使用与您正在使用的代码类似的代码。
编辑网格选项 - 面板
网格生成器在此过程后期有一些选项(我认为是第 7 步),允许您勾选“向每列添加面板(用于隐藏/显示功能)”,这将在每列(和列标题)周围添加面板所以你可以在后面的代码中打开和关闭它们。但是,由于它们应该具有唯一的名称,因此您也可以使用 jQuery 来关闭整列。
Specify if all controls are taken into the blocks of the following type:
<!-- BEGIN ControlType ControlName --><!-- END ControlType ControlName -->
It will be used to dynamically hide/show controls on the page.
来自“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中包含您自己的总计,并将其添加到BeforeShow中的显示总计中。 (请参阅 Codecharge 帮助中的“包含总计的简单报告”)。
关于jquery - 隐藏空数据库表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37431602/