2014-01-15 3 views
3

Я пытаюсь скрыть/показать разные столбцы на вложенной сетке растра телерика в событии предварительной рендеринга на основе флага, но все они отображаются независимо от того, что я установил видимой или дисплей свойствоСкрыть/отобразить столбцы 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(); 
} 

Все эти столбцы отображаются, даже если я себе t отображение на false, QuickWatch в столбцах даст отображаемое значение как ожидаемое (т.е. true или false), но когда загрузка страницы все они отображаются в сетке.

Любые идеи кто-нибудь?

ответ

8

Я никогда не была проблема, я, тем не менее, я, как правило, получают столбцы удаляемого через MasterTableView, а не коллекции столбцов, поэтому в вашем примере что-то вроде должно работать:

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

Лично я предпочитаю использовать атрибут Display по атрибуту Visible, так как это все равно будет заполнять данные (в случае, если вы хотите изменить видимость в 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