2009-09-11 43 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>