2011-03-09 35 views
2

我已經看到了一些關於如何得到這個工作的其他帖子...但是他們似乎沒有關心你已經subcassed GridView作爲你自己的自定義服務器控件的情況。更改gridview渲染thead元素

我試圖設置這些屬性來獲取GridView呈現一個thead元素,但我不斷得到一個空引用異常。任何接受者?

這裏是DatBind方法我overrided

new public void DataBind() 
    { 
     base.DataBind(); 
     UseAccessibleHeader = true; 
     HeaderRow.TableSection = TableRowSection.TableHeader; //<<-- NRE here 
     FooterRow.TableSection = TableRowSection.TableFooter; 
    } 

我想要這個邏輯到GridView控制內被封裝,而不是從外部設定。我們正在嘗試更新這種行爲,如果我們採取了這種方法,則必須添加代碼以將其設置在上千個不同的地方。

+0

其實,你不是重寫DataBind,你只是通過創建全新的方法隱藏它 – 2011-03-09 18:38:38

+0

@Loki kriasus迂腐但是,你是對的 – 2011-03-09 18:42:12

+0

也許嘗試設置useAccessibleHeader = true在數據綁定之前,所以當它綁定數據時它會生成相應的部分? – 2011-03-09 19:08:58

回答

2

顯然,預渲染事件是最好的地方。訣竅是,在某些情況下是ellude我來說,HeaderRow財產將是無效的,所以我只需要檢查空=(

private void MakeAccessible() 
    { 
     if (HeaderRow != null && !AllowPaging) 
     { 
      UseAccessibleHeader = true; 
      HeaderRow.TableSection = TableRowSection.TableHeader; 
      FooterRow.TableSection = TableRowSection.TableFooter; 
     } 
    } 

    protected override void OnPreRender(EventArgs e) 
    { 
     MakeAccessible(); 
    } 

洛爾沒有發生較早,我認爲有時候是空,有時是不是... doh