Скрыть / отобразить столбцы Telerik RadGrid при предварительной визуализации
Я пытаюсь скрыть / показать разные столбцы на вложенной сетке Telerik Rad в событии перед рендерингом, основываясь на флаге, но все они отображаются независимо от того, что я установил для свойства visible или display:
Это мои столбцы сетки:
<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), но при загрузке страницы все они отображаются в сетке.
Любые идеи кто-нибудь?
1 ответ
Я никогда не сталкивался с проблемой самостоятельно, однако я склонен удалять столбцы через 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