2011-07-27 45 views
0

我想獲得一個網格,根據某個列的值(數據源按此列排序)添加subheader(一個或多個行)的能力。在繼承的GridView中,我重寫了OnRowDataBind方法:如果OnRowDataBind的當前調用中的列的值不等於先前的值,那麼在當前行之前插入特殊的標題行。問題與動態添加到自定義GridView的subheader

Table tbl = this.Controls[0] as Table; //this - pointer to CustomGridView tbl.Controls.AddAt(rowIndex + add_counter + 1, NewSubHeaderRow); /*rowIndex - RowIndex of current row, add_counter - amount of already added SubHrader rows */

所有作品的權利。但是,當GridView恢復它的狀態時,回發時會出現問題。第一行及其所有控件進入每個組(即每個動態添加的子標題行之後的第一行)都沒有任何屬性。但組中的第二行保留其第一行的屬性和屬性。

一些幫助將非常有用。也許有另一種(和正確的)將行添加到GridView的方法。然後請給我提供教程或文章的鏈接。

回答

0

動態控件在回發中消失,因爲在回發框架中沒有關於此類控件的信息。這是程序員的責任,以保持這些動態控制跟蹤和回發後重新創建它們...

請參考以下後重新創建動態控件在回發: FAQ: Why do dynamic controls disappear on postback

+0

我應該在CustomGridView的overriden OnLoad每次回發中調用DataBind函數嗎?那麼在這種情況下我們需要什麼StateView? – DotNetter

+0

是的,你需要添加動態頭每次回發發生..這是一個很好的例子,維護動態控件的視圖狀態:http://chiragrdarji.wordpress.com/2009/05/20/maintain-viewstate-for-dynamic - 對照-全面的回發/ – Waqas

0

感謝Waqas。 這是我的決定。 我重寫CreateChild(datasource,isBinding)並創建列放置索引的行,在這之前您應該添加子標題行。在SaveViewState上,我將這個列表添加到密封對象。在加載ViewState我加載這個列表,如果它不是null保存索引創建子頭行。 也許,有一種更簡單,更自然的方式。但它安全地隱藏起來)))