我正在开发一个 SharePoint 2010 非可视 WebPart,它在一个大表中显示某种数据。应通过从作为 Web 部件一部分的 DropDownList 中选择过滤条件来过滤表格行。
DropDownList 的 OnSelectedIndexChanged 事件在 CreateChildControls 之后和 OnPreRender 之前触发。因为表格的单元格包含附加了 OnClick 事件的 LinkButtons,所以必须在 CreateChildControls 中创建它们才能触发 OnClick 事件。
在触发 DropDownList 的 OnSelectedIndexChanged 之前,我不知道要隐藏表的哪些行,因此我在 CreateChldControls 中创建所有可能的表行,并尝试稍后在 OnSelectedIndexChanged 事件中直接或在 OnPreRender 中删除过滤的行。这些行已从父表的控件集合中物理删除,但它们始终没有显示。
作为测试,我尝试在创建它们之后在 CreateChildControls 方法的末尾删除一些随机行,它起作用并且未呈现行。
我如何删除行:
Table mt = FindControl("matrixtable") as Table;
Helpers.Log("Controls in Table: " + mt.Controls.Count);
foreach (int kdid in kdIdsInvisible)
{
TableRow c = mt.FindControl("kdrow" + kdid) as TableRow;
Helpers.Log(c.ID);
mt.Controls.Remove(c);
}
Helpers.Log("Controls in Table: " + mt.Controls.Count);
输出:
Controls in Table: 88
Controls in Table: 2
但是所有行仍然被渲染......
有解决方案吗?先感谢您!