更改gridview (ASP.NET)中特定行的按钮属性



当我单击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中获取当前行,然后只对一行进行操作。

最新更新