3

フラグに基づいて、レンダリング前のイベントでネストされたテレリク 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) を示しますが、ページが読み込まれると、それらはすべてグリッドに表示されます。

アイデアはありますか?

4

1 に答える 1

9

私は自分自身で問題を抱えたことはありませんが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

于 2014-01-15T14:02:17.560 に答える