Problem mit doppeltem Löschen nach Delete durch Objectdatasource

24/06/2008 - 12:52 von Jens Bottenschein | Report spam
Hallo NG,

habe das Problem, dass nach dem Löschen einer Row in einer GridView, die an
ein Objectdatasource gebunden ist, 2 Zeilen gelöscht werden. Der Page-Cycle
wird 2x durchlaufen.

In einer default.aspx gibt es ein Updatepanel, in das ein Usercontrol
geladen wird. Das Usercontrol enthàlt wiederum verschachtelte UpdatePanels
und in einem steckt das GridView. Alle UpdatePanels sind auf
UpdateMode="Conditional" und ChildrenAsTriggers="false".

Ich verstehe nicht, wieso der Page-Lifecycle 2x durchlaufen wird und 2
Zeilen aus meiner GridView gelöscht werden. Weiß jemand Rat?

Hier ein Auszug aus dem Seitenaufbau:

default.aspx.cs:
-

protected void Page_Load(object sender, EventArgs e)
{
LoadBottomControl(LoadControl("userctrl.ascx"));
}

private void LoadBottomControl(Control ctrl)
{
.
PlaceHolder1.Controls.Clear();
PlaceHolder1.Controls.Add(ctrl);
UpdatePanel1.Update();
}


userctrl.ascx:

<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Conditional"
ChildrenAsTriggers="false">
<ContentTemplate>

<asp:UpdatePanel ID="upMaterial" runat="server"
UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<asp:GridView
ID="MaterialGridView"
runat="server" AutoGenerateColumns="False"
CssClass="paddedtable"
DataKeyNames="OrderID,PosID"
DataSourceID="MaterialDataSource"
onrowcommand="MaterialGridView_RowCommand"
onrowdatabound="MaterialGridView_RowDataBound"
ShowFooter="True">
<Columns>
<asp:TemplateField HeaderText="Artnr" SortExpression="Artnr">
<ItemTemplate>
<asp:Label ID="lblArtnr" runat="server" Text='<%# Bind("Artnr")
%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="tbArtnr" runat="server" Text='<%# Bind("Artnr")
%>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="tbNewArtnr" runat="server" Text='<%# Bind("Artnr")
%>'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:CommandField
ShowDeleteButton="True"
ShowEditButton="True"
ShowInsertButton="False" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="MaterialDataSource" runat="server"
DeleteMethod="Delete"
InsertMethod="Insert"
oninserting="MaterialDataSource_Inserting"
SelectMethod="GetDataByPosID"
UpdateMethod="Update"
OldValuesParameterFormatString="Original_{0}"
TypeName="DataSetXTableAdapters.XAdapter"
onupdating="MaterialDataSource_Updating"
ondeleted="MaterialDataSource_Deleted">
<DeleteParameters>
<asp:Parameter Name="Original_OrderID" Type="String" />
<asp:Parameter Name="Original_PosID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
...
</UpdateParameters>
<SelectParameters>
<asp:SessionParameter Name="GA_ID" SessionField="temp_gaid"
Type="String" />
<asp:SessionParameter Name="POS_ID" SessionField="temp_posid"
Type="Int32" />
</SelectParameters>
<InsertParameters>
...
</InsertParameters>
</asp:ObjectDataSource>
</ContentTemplate>
</asp:UpdatePanel>
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
25/06/2008 - 02:25 | Warnen spam
Hallo Jens,

"Jens Bottenschein" schrieb:

habe das Problem, dass nach dem Löschen einer Row in einer GridView, die an ein Objectdatasource gebunden ist, 2 Zeilen gelöscht
werden. Der Page-Cycle wird 2x durchlaufen.



Ist AutoEventWireUp auf True gesetzt? Wird ein EventHandler noch manuell
zugewiesen?

UpdatePanel1.Update();



Was soll das deiner Meinung nach bewirken?

<asp:ObjectDataSource ID="MaterialDataSource" runat="server"
...



Warum verwendest Du sowas? Ich verweise einfach mal auf den (lesenswerten)
Artikel von Karsten.

http://www.karsan.de/ASPNETHandarbe...ource.aspx

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen