如何在GridView中更改列属性?

时间:2018-04-06 21:50:50

标签: c# asp.net webforms

我有GridView有4个数据字段和1个隐藏模板字段,有2个按钮。我尝试以编程方式将模板可见性设置为true,但以下操作无效:

ASPX

<asp:GridView ID="PendingView" runat="server" AutoGenerateColumns="False" OnDataBound="CheckButtons">
    <Columns>
        <asp:BoundField DataField="RID" visible="false" />
        <asp:BoundField DataField="ExpenseType" HeaderText="Expense Type" />
        <asp:BoundField DataField="CurrentDate" HeaderText="Date" />
        <asp:BoundField DataField="Amount" HeaderText="Amount" />
        <asp:BoundField DataField="Details" HeaderText="Details" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnApprove" runat="server" text="Approve" Visible="false" />
                <asp:Button ID="btnDecline" runat="server" text="Decline" Visible="false"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

aspx.cs

//all works perfectly fine except last line
DataSet allInfo = new DataSet();
allInfo = GetData();
PendingView.DataSource = allInfo;
PendingView.DataBind();
PendingView.Columns[5].Visible = true; //doesn't work

1 个答案:

答案 0 :(得分:1)

您的模板字段未隐藏,其中的两个按钮是隐藏的。因此,将列可见性设置为true当然不起作用。您需要更改内部按钮的可见性。

看起来你正试图让它在开头可见,那你为什么要隐藏aspx页面中的按钮然后试图让它在代码隐藏中可见?只需删除Visible="false"

,就可以在aspx页面中看到它们
<asp:Button ID="btnApprove" runat="server" text="Approve" />
<asp:Button ID="btnDecline" runat="server" text="Decline" />

如果你真的想在aspx中隐藏它并在代码隐藏中显示它,那么在aspx页面中隐藏模板字段本身:

<asp:TemplateField Visible="false">
    <ItemTemplate>
        <asp:Button ID="btnApprove" runat="server" text="Approve"  />
        <asp:Button ID="btnDecline" runat="server" text="Decline" />
    </ItemTemplate>
</asp:TemplateField>

然后你的代码隐藏工作就像你在问题中一样。

如果你想在问题中隐藏aspx页面(隐藏按钮),那么你需要在代码隐藏中显示按钮,而不是模板。问题是要访问这些按钮,您必须遍历行。像这样:

foreach(var row in == PendingView.Rows) {
    row.FindControl("btnApprove").Visible = true;
    row.FindControl("btnDecline").Visible = true;
}