Asp.net Gridview内部中继器未触发删除事件

Asp.net Gridview内部中继器未触发删除事件,asp.net,gridview,repeater,Asp.net,Gridview,Repeater,我有一个中继器,其中有一个gridview,它使用带有delete命令的SqlDataSource。当我在给定行上单击delete时,它会发回,但不会触发delete。我忘了什么吗?您设置了GridView的设置了吗?需要将其设置为项的主键,以唯一标识要修改的记录。如果未进行设置,单击“删除”(或“编辑”)将导致回发,但回发不会影响任何内容,因为a未与每个GridView行关联 根据该页面: 当DataKeyNames属性为 设置GridView控件 自动创建数据键 控件中每行的。 DataKe

我有一个中继器,其中有一个gridview,它使用带有delete命令的SqlDataSource。当我在给定行上单击delete时,它会发回,但不会触发delete。我忘了什么吗?

您设置了GridView的设置了吗?需要将其设置为项的主键,以唯一标识要修改的记录。如果未进行设置,单击“删除”(或“编辑”)将导致回发,但回发不会影响任何内容,因为a未与每个GridView行关联

根据该页面:

当DataKeyNames属性为 设置GridView控件 自动创建数据键 控件中每行的。 DataKey对象包含 一个或多个字段的值 在DataKeyName中指定 财产

例如,假设您正在删除由ProductID字段标识的产品项

您的SqlDataSource可能如下所示:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
SelectCommand= "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]" 
DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID">
    <DeleteParameters>
      <asp:Parameter Name="ProductID" />
    </DeleteParameters>
</asp:SqlDataSource>


  • 是否设置了GridView的设置?需要将其设置为项的主键,以唯一标识要修改的记录。如果未进行设置,单击“删除”(或“编辑”)将导致回发,但回发不会影响任何内容,因为a未与每个GridView行关联

    根据该页面:

    当DataKeyNames属性为 设置GridView控件 自动创建数据键 控件中每行的。 DataKey对象包含 一个或多个字段的值 在DataKeyName中指定 财产

    例如,假设您正在删除由ProductID字段标识的产品项

    您的SqlDataSource可能如下所示:

    <asp:SqlDataSource ID="ProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    SelectCommand= "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]" 
    DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID">
        <DeleteParameters>
          <asp:Parameter Name="ProductID" />
        </DeleteParameters>
    </asp:SqlDataSource>
    
    
    

  • 首先,你应该为清晰的问题添加一些代码。任何试图帮助你的人都会问你一些代码。

    依我看,, *如果您正在使用
    按钮、链接按钮、图像
    执行删除操作,则可能忘记使用命令名

    在GridView列中声明的CommandField:

    <asp:CommandField ShowDeleteButton="True" />
    

    *另外,您是否在回发操作之间使用UpdatePanel???

    首先,您应该添加一些代码以明确问题。任何试图帮助您的人都会询问您一些代码。

    依我看,, *如果您正在使用
    按钮、链接按钮、图像
    执行删除操作,则可能忘记使用命令名

    在GridView列中声明的CommandField:

    <asp:CommandField ShowDeleteButton="True" />
    

    *另外,您是否在回发操作之间使用UpdatePanel???

    我刚刚建立了一个非常基本的示例,没有任何问题。如果不发布代码(正如许多其他人所要求的那样),我们就无法为您提供太多帮助

    下面是我的示例中的代码—这里没有什么棘手的问题,只需将字符串数组绑定到中继器,并使用指定的select和delete命令将gridview绑定到sqldatasource

    我所能想到的是,您的数据源没有指定delete命令/方法(但您会得到一个明确的错误),或者您没有在gridview中指定DataKeyName(但您也会得到一个明确的错误)

    
    行:

    和数据源(来自我已设置的现有数据库)


    我刚刚建立了一个非常基本的示例,没有任何问题。如果不发布代码(正如许多其他人所要求的那样),我们就无法为您提供太多帮助

    下面是我的示例中的代码—这里没有什么棘手的问题,只需将字符串数组绑定到中继器,并使用指定的select和delete命令将gridview绑定到sqldatasource

    我所能想到的是,您的数据源没有指定delete命令/方法(但您会得到一个明确的错误),或者您没有在gridview中指定DataKeyName(但您也会得到一个明确的错误)

    
    行:

    和数据源(来自我已设置的现有数据库)

    
    
    是的,我在我的应用程序中成功地使用了这个gridview设置,并且我确实指定了DataKeyName。数十个其他gridview与此gridview之间的唯一区别在于,它是中继器的子项。是的,我在我的应用程序中成功地使用了此gridview设置,并且我确实指定了DataKeyName。数十个其他GridView与此GridView之间的唯一区别是它是一个repeater的子版本。您能提供一个源代码的和平版本吗?命令无法启动有很多原因。请提供一个源代码的和平版本好吗?命令不能发出的原因有很多。
    e.Cancel = true //remove it
    
    <asp:Repeater ID="rp" runat="server">
    <ItemTemplate>
    <p>Row: <%#Container.DataItem%></p>
    
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="CroppingID">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" />
            <asp:BoundField DataField="CroppingID" HeaderText="CroppingID" ReadOnly="True" SortExpression="CroppingID" />
            <asp:BoundField DataField="CroppingName" HeaderText="CroppingName" SortExpression="CroppingName" />
        </Columns>
    </asp:GridView>
    
    </ItemTemplate>
    </asp:Repeater>
    
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:sConn %>" DeleteCommand="spD_Cropping" 
        DeleteCommandType="StoredProcedure" SelectCommand="spS_Croppings" 
        SelectCommandType="StoredProcedure">
        <DeleteParameters>
            <asp:Parameter Name="CroppingID" Type="Byte" />
        </DeleteParameters>
    </asp:SqlDataSource>