1

我有一个 GridView 显示从数据库中检索的数据。我使用以下代码将 TemplateField (CheckBox) 制作为 GridView:

<asp:GridView ID="dbRecordsContent" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" OnSelectedIndexChanged="dbRecordsContent_SelectedIndexChanged">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="myCheckBox" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
        <asp:BoundField DataField="url" HeaderText="url" SortExpression="url" />
        <asp:BoundField DataField="category" HeaderText="category" SortExpression="category" />
        <asp:BoundField DataField="isChecked" HeaderText="isChecked" SortExpression="isChecked" />
    </Columns>
</asp:GridView>

我的网格视图如下所示:

在此处输入图像描述

我的问题是:我怎么知道选中了哪个复选框 ID?例如:

当我按下“删除”按钮时,我想删除第二行。当然我会检查第二个复选框,但是我怎么知道要删除哪条记录呢?如何在代码中引用第二个复选框?

4

2 回答 2

2

在删除按钮的单击事件处理程序中,您需要遍历网格中的所有行,如果选中了复选框,则需要执行删除逻辑,如下所示:

protected void DeleteButton_Click(object sender, EventArgs e)
{
    foreach(GridViewRow row in dbRecordsContent.Rows)
    {
        // Only look for check boxes in data rows, ignoring header 
        // and footer rows
        if (row.RowType == DataControlRowType.DataRow)
        {
            if (((CheckBox)row.FindControl("myCheckBox")).Checked)
            {
                // Do delete logic here
            }
        }
    }
}

更新:

要获取行号,请使用该GridViewRow.RowIndex属性,如下所示:

int rowNumber = row.RowIndex;

阅读GridViewRow.RowIndex 属性了解更多信息。

于 2013-09-27T12:28:08.097 回答
0

尝试这个,

<asp:TemplateField>
        <ItemTemplate>
            <asp:CheckBox ID="myCheckBox" runat="server" AutoPostBack="true"
                       oncheckedchanged="CheckBox1_CheckedChanged" />
        </ItemTemplate>
</asp:TemplateField>

代码方面,

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
    GridViewRow row = ((GridViewRow)((CheckBox)sender).NamingContainer);
    int index = row.RowIndex;
    CheckBox cb1 = (CheckBox)Gridview.Rows[index].FindControl("myCheckBox");
    string checkboxstatus;
    if (cb1.Checked)
    {
      //write your code
    }        
    else
    {
      //write your code
    }
}
于 2013-09-27T12:42:48.443 回答