C# gridview中的引用特定复选框
我有一个GridView,它显示从数据库检索到的数据。我使用以下代码将TemplateField(复选框)设置为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"> &
<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
语句?是的,这是我的错。我把一些东西弄混了。你的代码是完美的。我会接受你的回答。