我正在開發一個SharePoint 2010非可視WebPart,它在大表中顯示某種數據。 應該通過從屬於WebPart的一部分的DropDownList中選擇過濾條件來過濾表格行。Controls.Remove()在CreateChildControls之後不起作用?
DropDownList的OnSelectedIndexChanged事件在CreateChildControls之後和OnPreRender之前觸發。由於表格的單元格包含連接了OnClick事件的LinkButtons,因此必須在CreateChildControls中創建它們才能觸發OnClick事件。
我不知道表中哪些行要隱藏,直到DropDownList的OnSelectedIndexChanged被觸發,所以我在CreateChldControls中創建所有可能的錶行,並嘗試直接在OnSelectedIndexChanged事件中或在OnPreRender中刪除過濾的行。這些行從父表的控件集合中被物理地移除,但是它們被顯示爲nevertheles。
作爲一個測試,我嘗試在創建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
但所有行仍呈現...
是否有一個解決方案?先謝謝你!
刪除行你確定你是不是你刪除的控件數據綁定後的工作例如更換線
mt.Controls.Remove(c);
?嘗試在PreRender上執行刪除操作。 – Peter我試圖先刪除OnPreRender中的控件。它不起作用。控件被刪除,(我檢查過),但它們仍然呈現。刪除控件只能在CreateChildControls中使用,但是目前我不知道要刪除哪些控件。我會在OnPreRender中知道這一點。雞或蛋的困境。 – elsni
而不是在CreateChildControls上添加表,將項目添加到一個單獨的列表。然後在OnPreRender中添加你知道哪些要添加的。只是一個解決方法。它會注意到代碼有其他問題,如果您不在init或load上添加動態控件,則在處理回發事件時會遇到問題。也許你可以在列表中存儲列表,以在那裏做正確的渲染。 – Peter