2009-09-11 45 views
1

我有一个Repeater,它有一个GridView,它使用一个带有删除命令的SqlDataSource。当我点击给定行上的删除时,它会回发,但不会触发删除。我忘记了什么吗?Repeater中的Gridview不能触发Delete事件

+1

可否请你提供的源代码中的和平?命令不会触发的原因有很多。 – Arthur 2009-09-27 09:39:33

回答

2

您是否设置了GridView的DataKeyNames property?它需要设置为该项目的主键来唯一标识要修改的记录。如果您没有设置它,单击删除(或编辑)将导致回发,因为DataKey未与每个GridView行关联,所以回发不会影响任何内容。

按照GridView.DataKeys property页:

当DataKeyNames属性是 集,GridView控件 自动创建用于控制每行一个DataKey 对象。 DataKey对象包含在DataKeyNames 属性中指定的字段或字段 的 值。

例如,假设您要删除由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> 

然后,您可以分配相同的“产品ID”主键,把GridView的DataKeyNames属性:

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
     DataKeyNames="ProductID" ... 

这些教程可能对你有帮助:

+0

是的,我成功地在我的应用程序中成功使用了这个gridview设置,并且我指定了DataKeyNames。其他几十个gridviews和这个gridview之间的唯一区别就是它是一个转发器的孩子。 – 2009-09-21 18:19:55

1

首先,你应该添加清晰questions.Anyone谁将会尽力帮助您会问你一些代码一些代码。

在我看来, *如果您正在使用Button,LinkButton,Image删除操作的可能是你忘了使用的CommandName

CommandField中这是在GridView的列声明:

<asp:CommandField ShowDeleteButton="True" /> 

模板列可能是:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:LinkButton ID="lnkDelete" runat="server" CommandName="Delete" Text="Delete"/> 
    </ItemTemplate> 
</asp:TemplateField> 

above declara当点击链接时tions将有相同的结果。检查您已成功分配CommandName属性。

*其他意见,如果你看起来更详细OnRowDeleting情况下,如果你在你使用回传操作之间的UpdatePanel设置

e.Cancel = true //remove it 

*也?

1

我刚刚设置了一个没有问题的非常基本的例子。如果没有发布代码(其他许多人已经要求),我们可以帮您解决的问题并不多。

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

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

<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> 
相关问题