2014-01-15 46 views
3

我試圖隱藏/顯示預渲染事件中基於標誌的嵌套telerik rad網格上的不同列,但它們都顯示,無論我設置了什麼可見或顯示屬性在預渲染上隱藏/顯示Telerik RadGrid列

這些都是我的網格列:

<telerik:GridBoundColumn UniqueName="LocalDeanery" ReadOnly="true" DataField="localdeanery" HeaderText="Local Deanery" SortExpression="localdeanery" 
    HtmlEncode="false" > 
</telerik:GridBoundColumn>    

<telerik:GridTemplateColumn UniqueName="Sector2013" HeaderText="Sector" SortExpression="hasBeenHeld desc,Sector" AllowFiltering="false" > 
    <ItemTemplate> 
     <asp:Label ID="Label2" runat="server" Text='<%# Eval("Sector").ToString() + " (" + Eval("PrefRank").ToString() + ") " + (Eval("conditional").ToString()==""?"":"Conditional")%>' 
      Visible='<%# Eval("OfferId").ToString()!="" %>' /> 
    </ItemTemplate> 
</telerik:GridTemplateColumn> 

<telerik:GridBoundColumn UniqueName="Region" ReadOnly="true" DataField="tRegion" HeaderText="Region" SortExpression="tRegion" 
    HtmlEncode="false"> 
</telerik:GridBoundColumn>    

<telerik:GridBoundColumn UniqueName="Subregion" ReadOnly="true" DataField="tSubRegion" HeaderText="Sub-Region" SortExpression="tSubRegion" 
    HtmlEncode="false" > 
</telerik:GridBoundColumn>    

<telerik:GridBoundColumn UniqueName="Sector2014" ReadOnly="true" DataField="tSector" HeaderText="Sector" SortExpression="tSector" 
    HtmlEncode="false" > 
</telerik:GridBoundColumn> 

這是隱藏的列代碼:

protected void RadGrid1_PreRender(object sender, EventArgs e) 
{ 
    RadGrid od = (RadGrid)RadGrid1.MasterTableView.Items[0].ChildItem.FindControl("OfferDataDetail"); 
    Label ry = (Label)RadGrid1.MasterTableView.Items[0].ChildItem.FindControl("LblRoundYear"); 

    int RoundYear = 2014; 
    if (ry != null) RoundYear = int.Parse(ry.Text); 

    //display for 2013 
    od.Columns.FindByUniqueName("LocalDeanery").Visible = (RoundYear == 2013); 
    od.Columns.FindByUniqueName("Sector2013").Visible = (RoundYear == 2013); 
    //display for 2014 
    od.Columns.FindByUniqueName("Region").Visible = (RoundYear == 2014); 
    od.Columns.FindByUniqueName("Subregion").Visible = (RoundYear == 2014); 
    od.Columns.FindByUniqueName("Sector2014").Visible = (RoundYear == 2014); 

    od.Rebind(); 
} 

所有這些列的顯示,即使我本身如果顯示爲false,那麼列上的QuickWatch將按照我的預期給出顯示值(即true或false),但當頁面加載時,它們全部顯示在網格中。

任何想法的人?

回答

8

我從來沒有過自己的問題,但是我往往會得到列正在通過MasterTableView刪除,而不是列集合,因此在你的例子類似下面應該工作:

od.MasterTableView.GetColumn("Region").Display = (RoundYear == 2014); 

就個人而言,我更喜歡使用Visible屬性的Display屬性,因爲這仍然會填充數據(如果您想更改javascript中的可見性或從代碼中訪問文本而無需重新綁定)。

以下Telerik的論壇帖子也可以幫助:

http://www.telerik.com/community/forums/aspnet-ajax/grid/setting-the-property-from-codebehind.aspx

http://www.telerik.com/community/forums/aspnet-ajax/grid/how-to-hide-columns-in-radgrid.aspx