C# gridview中的引用特定复选框

C# gridview中的引用特定复选框,c#,asp.net,gridview,checkbox,C#,Asp.net,Gridview,Checkbox,我有一个GridView,它显示从数据库检索到的数据。我使用以下代码将TemplateField(复选框)设置为GridView: <asp:GridView ID="dbRecordsContent" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" OnSelectedIndexChanged="dbRecordsContent_SelectedIndexChanged"> &

我有一个GridView,它显示从数据库检索到的数据。我使用以下代码将TemplateField(复选框)设置为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>

我的网格视图如下所示:

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
            }
        }
    }
}
int rowNumber = row.RowIndex;

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


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

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

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
            }
        }
    }
}
int rowNumber = row.RowIndex;
更新:

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

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
            }
        }
    }
}
int rowNumber = row.RowIndex;
阅读了解更多信息。

试试这个

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

它工作得很好。还有一个问题。如何检查行号?@rootpanthera-请参见回答中的
更新:
。嗯,事实上我发现它没有正常工作。仅当选中了行中的最后一个复选框(上面的true语句)时,它才起作用。即使选中了任何其他复选框,Else语句也始终执行。知道为什么吗?什么
else
语句,我发布的代码中没有
else
语句?是的,这是我的错。我把一些东西弄混了。你的代码是完美的。我会接受你的回答。