C# 从GridView中删除选中的行

C# 从GridView中删除选中的行,c#,asp.net,gridview,checkbox,C#,Asp.net,Gridview,Checkbox,我有一个gridview,我添加了一个ItemTemplate来为每一行显示一个复选框。我试图简单地删除代码隐藏文件中选中的行。我的问题是我的代码隐藏没有检测到复选框。这是非常奇怪的,因为我觉得我没有改变任何东西,但代码不再工作(它在两天前工作,但在本地保存了这些更改-没有上传到TFS) GridView(编辑以包括绑定): 我的代码中是否有任何内容可以防止检测到该复选框?我在该方法上放置了一个断点,然后它检查复选框的有效性,但是在它遍历每一行之后,没有检测到任何行。提前谢谢 在我看来,它就像服

我有一个gridview,我添加了一个ItemTemplate来为每一行显示一个复选框。我试图简单地删除代码隐藏文件中选中的行。我的问题是我的代码隐藏没有检测到复选框。这是非常奇怪的,因为我觉得我没有改变任何东西,但代码不再工作(它在两天前工作,但在本地保存了这些更改-没有上传到TFS)

GridView(编辑以包括绑定):


我的代码中是否有任何内容可以防止检测到该复选框?我在该方法上放置了一个断点,然后它检查复选框的有效性,但是在它遍历每一行之后,没有检测到任何行。提前谢谢

在我看来,它就像服务器端一样,它对您的
GridView
一无所知,因为您设置了
EnableViewState=“False”

将其设置为
true
,然后查看是否有帮助。如果没有,请检查如何绑定
GridView
,并确保在
DeleteRows
函数运行之前,没有将其重新绑定到
页面加载中的
null
值或其他值。发布如何绑定,因为这将有助于诊断问题

我最近还发布了一个类似问题的答案,你可以在这里找到:

所以所有复选框都被找到了,但两个都没有被选中,对吗?在本例中,您能否显示网格视图绑定的代码,最好是发生这种情况的整个页面事件处理程序?只添加了源控件。如果页面被发回,我尝试将数据绑定到网格,因为我的想法是db已经被更新了,但这可能是错误的。将EnableViewState更改为true,但没有效果。我确实在编辑我的原始问题时发布了数据源控件。我删除了回发网格绑定,它似乎已经解决了我的问题。我在删除记录后添加了一个网格绑定,但是在DeleteRows方法中,该绑定的功能正常工作。关于另一个问题,但是谢谢你的帮助!
  <%--Data Grid--%>
<asp:GridView ID="Grid_Recipe" CssClass="gridMain" runat="server" OnSelectedIndexChanged="Grid_Recipe_SelectedIndexChanged" AutoGenerateColumns="False" DataKeyNames="Recipe_ID" DataSourceID="DataSource_Grid_Unfiltered" EnableViewState="True" AllowPaging="True" AllowSorting="True" BorderStyle="Solid" BorderWidth="1px" CellPadding="1" CellSpacing="1" HorizontalAlign="Center">

    <AlternatingRowStyle BackColor="#CCFFFF" />

    <Columns>
        <asp:CommandField ShowSelectButton="True" SelectText="Edit" />
        <asp:TemplateField HeaderText="Select"> 
            <ItemTemplate> 
                <asp:CheckBox ID="deleteCheckbox" runat="server" /> 
            </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="Recipe_ID" HeaderText="Recipe_ID" InsertVisible="False" ReadOnly="True" SortExpression="Recipe_ID" Visible="false" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Difficulty" HeaderText="Difficulty" SortExpression="Difficulty" />
        <asp:BoundField DataField="Meal" HeaderText="Meal" SortExpression="Meal" />
        <asp:BoundField DataField="Cook_Time" HeaderText="Cook Time" SortExpression="Cook_Time" />
        <asp:BoundField DataField="Directions" HeaderText="Directions" SortExpression="Directions" />
    </Columns>
    <HeaderStyle BackColor="#0096D6" ForeColor="White" HorizontalAlign="Right" />
</asp:GridView>

<%--Delete Button--%>
<asp:Button runat="server" ID="deleteButton" Text="Delete Checked" OnClick="DeleteRows" />


<%--Data Sources--%>
<asp:SqlDataSource ID="Meal_Filter" runat="server" ConnectionString="<%$ ConnectionStrings:LYNNAU_ConnectionString %>" SelectCommand="SELECT DISTINCT [Meal] FROM [Recipe]"></asp:SqlDataSource>
<asp:SqlDataSource ID="DataSource_Grid_Unfiltered" runat="server" ConnectionString="<%$ ConnectionStrings:LYNNAU_ConnectionString %>" SelectCommand="SELECT * FROM [Recipe]" UpdateCommand="UPDATE [Recipe] SET [Name] = @Name, [Difficulty] = @Difficulty, [Meal] = @Meal, [Cook_Time] = @Cook_Time, [Directions] = @Directions WHERE [Recipe_ID] = @Recipe_ID">
    <DeleteParameters>
        <asp:Parameter Name="Recipe_ID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="Name" Type="String" />
        <asp:Parameter Name="Difficulty" Type="String" />
        <asp:Parameter Name="Meal" Type="String" />
        <asp:Parameter Name="Cook_Time" Type="Int32" />
        <asp:Parameter Name="Directions" Type="String" />
        <asp:Parameter Name="Recipe_ID" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="DataSource_Grid_Meal" runat="server" ConnectionString="<%$ ConnectionStrings:LYNNAU_ConnectionString %>" SelectCommand="SELECT * FROM [Recipe] WHERE ([Meal] = @Meal)" UpdateCommand="UPDATE [Recipe] SET [Name] = @Name, [Difficulty] = @Difficulty, [Meal] = @Meal, [Cook_Time] = @Cook_Time, [Directions] = @Directions WHERE [Recipe_ID] = @Recipe_ID">
    <DeleteParameters>
        <asp:Parameter Name="Recipe_ID" Type="Int32" />
    </DeleteParameters>
    <SelectParameters>
        <asp:ControlParameter ControlID="Meal_DDL" Name="Meal" PropertyName="SelectedValue" Type="String" />
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="Name" Type="String" />
        <asp:Parameter Name="Difficulty" Type="String" />
        <asp:Parameter Name="Meal" Type="String" />
        <asp:Parameter Name="Cook_Time" Type="Int32" />
        <asp:Parameter Name="Directions" Type="String" />
        <asp:Parameter Name="Recipe_ID" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>
[WebMethod]
protected void DeleteRows(object sender, EventArgs e)
{
    dbCRUD delete = new dbCRUD();
    foreach(GridViewRow grd in Grid_Recipe.Rows)
    {
        if(grd.RowType == DataControlRowType.DataRow)
        {
            if((grd.FindControl("deleteCheckbox") as CheckBox).Checked)
            {
                string id = Grid_Recipe.DataKeys[grd.RowIndex].Value.ToString();
                //int intID = Convert.ToInt32(Grid_Recipe.SelectedDataKey.Value);
                int intID = int.Parse(id);
                if(delete.DeleteRecord(intID) == 1)
                {
                    resultsDelete.Text = "SQL Exception";
                    resultsDelete.Visible = true;
                    break;
                }
                else if(delete.DeleteRecord(intID) == 2)
                {
                    resultsDelete.Text = "Non SQL Exception";
                    resultsDelete.Visible = true;
                    break;
                }
                else
                {
                    resultsDelete.Text = "Record(s) deleted";
                    resultsDelete.Visible = true;
                }
            }
        }
    }
}