2011-03-09 80 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