当我单击gridview中的一行时,我想将该行中按钮的可见属性更改为true(我希望其他行中的所有其他按钮保持不可见)。在我当前的代码中,当我单击一行时,每行中的按钮都是可见的。我正在尝试在aspx背后的c#代码中进行此更改。
这是当前SelectedIndexChanged方法:
protected void gridviewAnnouncement_SelectedIndexChanged(object sender, EventArgs e) {
this.gridviewAnnouncement.Rows[gridviewAnnouncement.SelectedIndex].Cells[1].Text = getHeaderAndBody();
foreach (GridViewRow row in gridviewAnnouncement.Rows)
{
Button btn = row.FindControl("btnInterested") as Button;
btn.Visible = true;
}
}
这是gridview和button的aspx代码:
<asp:GridView ID="gridviewAnnouncement" runat="server" AutoGenerateColumns="false"
AutoGenerateSelectButton="true" OnSelectedIndexChanged="gridviewAnnouncement_SelectedIndexChanged"
GridLines="Horizontal" BorderStyle="Solid">
<Columns>
<asp:BoundField DataField="Header" HeaderText="Announcement" HtmlEncode="false" />
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:Button runat="server" ID="btnInterested" Text="Interested"
OnClick="btnInterested_Click" Visible="false"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
下面是当前发生的两个屏幕截图:
点击"Details"之前
单击"Details"后,仅在一行
我想要修复的唯一的事情是只有按钮显示为选定的行,而不是所有的。感谢任何能帮忙的人!
但是当您只想在一行上操作时,为什么要使用foreach ?
我假设你不能点击该行上的任何地方,而是点击细节按钮,因为你选择的索引不会触发,然后呢?
GridViewRow gvR = GridView1.SelectedRow;
Button btn = gvR.FindControl("btnInterested") as Button;
btn.Visible = true;
因此,您正在使用foreach -并且它将对网格中的所有行进行操作。
您可以按照上面的方法在SelectedIndexChange中获取当前行,然后只对一行进行操作。