我有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
答案 0 :(得分:1)
您的模板字段未隐藏,其中的两个按钮是隐藏的。因此,将列可见性设置为true
当然不起作用。您需要更改内部按钮的可见性。
看起来你正试图让它在开头可见,那你为什么要隐藏aspx页面中的按钮然后试图让它在代码隐藏中可见?只需删除Visible="false"
:
<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;
}