Autor Beitrag
gage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 03.12.09 11:53 
Hallo,

ich habe eine Frage zum GridView.RowDeleting-Ereignis. Ich habe mir auch schon die Hilfe angesehen.
msdn.microsoft.com/d...deleting(VS.80).aspx
ich möchte mit dem GridView.RowDeleting-Ereignis eine Meldung ausgeben ob der Ausgewälte Datensatz wirklich gelöscht werden soll. Wenn ich beim Gridview auf löschen drücke ist der Datensatz ohne eine Abfrage weg.

Meine Frage ist welche if-Bedingung kann ich verwenden?

den Code unten habe ich versucht anzupassen an das Beispiel:
<
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
asp:GridView ID="GridView1" runat="server" AllowPaging="True"
        autogeneratecolumns="true"
        autogeneratedeletebutton="true"
        onrowdeleting="GridView1_RowDeleting" 
        AllowSorting="True" CellPadding="4" 
        DataKeyNames="Id" DataSourceID="SqlDataSource1" ForeColor="#333333"
        GridLines="None" Width="679px">
        <RowStyle BackColor="#EFF3FB" />


hoffentlich hat jemand eine Idee!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 03.12.09 12:10 
Mit Postback? Wäre das als Javascript nicht um einiges sinnvoller?
Ich weiß leider nicht, wie man JS am besten an Server-Controls bindet, mit Webforms habe ich nichts am Hut.

_________________
>λ=
gage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 03.12.09 12:31 
ich habe es gerade mit diesem Code probiert:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
void CustomersGridView_RowDeleting(Object sender, GridViewDeleteEventArgs e)
        {
            if (GridView1.SelectedIndex == GridView1.EditIndex)
            {
                e.Cancel = true;
                Message.Text = " Wollen Sie wirklich löschen?";
            }
        }


Jetzt geht es schon mal und eine meldung wird ausgegeben:
ausblenden Quelltext
1:
2:
3:
<asp:label id="Message"
        forecolor="Red"          
        runat="server"/>


aber davon ist der datensatz dann noch nicht gelöscht. hat da jemand eine idee?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 03.12.09 13:36 
e.Cancel ist der richtige Weg, aber du musst ihn an der richtigen Stelle einbinden: Durch e.RowIndex erfährst du, um welche Zeile es geht. Dann kommt die Abfrage mit entsprechendem Hinweis. Die Abfrage liefert eine Antwort für "löschen": true oder false. Diese Antwort musst du nach e.Cancel übernehmen (aber dabei musst du die Bedeutung dieses Cancel beachten, denn das bricht den aktuellen Vorgang des Löschens ab).

Gruß Jürgen
gage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 03.12.09 16:30 
jetzt sieht es so aus und es kommt ein Fenster (Wollen Sie Wircklich löschen?)
aber wenn ich dann ok drücke dann wird nicht gelöscht.


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
void GridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e)
        {
            if (GridView1.SelectedIndex == GridView1.EditIndex)
            {
                e.Cancel = true;
                WebControl aBtn = (WebControl)GridView1.Controls[GridView1.TabIndex];
                aBtn.Attributes.Add("onclick", "return confirm ('Wollen Sie wirklich löschen?')");
             
            }
        }
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 03.12.09 18:08 
Du hast meine wichtigsten Hinweise ignoriert, insb.:
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Diese Antwort musst du nach e.Cancel übernehmen

Bei deiner jetzigen Lösung wird e.Cancel fest und unverrückbar auf true gesetzt; das bedeutet, das Löschen wird auf jeden Fall abgebrochen. Du musst aber die Antwort für deine Frage "wirklich löschen" übernehmen: ja => e.Cancel = false; nein => e.Cancel = true.

Jürgen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 03.12.09 22:02 
@gage: Der JS-Code sieht doch gar nicht schlecht aus, aber er muss natürlich vor dem Button-Click schon existieren.

@Jürgen: Innerhalb des Eventhandlers kannst du nicht mit dem User interagieren, dazu wäre ein weiterer Postback notwendig.

_________________
>λ=
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 04.12.09 10:44 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
@Jürgen: Innerhalb des Eventhandlers kannst du nicht mit dem User interagieren, dazu wäre ein weiterer Postback notwendig.

Danke für diesen Hinweis.

Ich weiß ja, dass ich zu ASP.NET überhaupt nichts weiß (genauer: weniger als nichts). Normalerweise halte ich mich deshalb auch völlig heraus. Nur die Sachlage mit e.Cancel schien mir so klar zu sein, dass ich mich über meine Bedenken hinweggesetzt habe.

Gruß Jürgen
gage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 04.12.09 11:01 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void GridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e)
        {
             
            if (GridView1.SelectedIndex == GridView1.EditIndex)
            {
                e.Cancel = true;
                GridView1.SelectedIndex++;
                WebControl aBtn = (WebControl)GridView1.Controls[GridView1.SelectedIndex];
                aBtn.Attributes.Add("onclick", "return confirm ('Wollen Sie wirklich löschen?')");
            }
        }


Mein Code Funktioniert so. Ich weiß zwar nicht ob er auch richtig ist und sinvoll. Gerade die Zeile wo ich SelectedIndex++ sage da bin ich am zweifeln ob das alles so richtig ist.

dann muss ich an einer Stelle ein neues Laden der Seite machen

ausblenden C#-Quelltext
1:
Load += new EventHandler(Page_Load);					


an welcher Stelle muss ich die Seite neu laden lassen?

Ich kann das ganze mit der Meldung nur einmal ausführen. Beim zweiten versuch einen Datensatz zu löschen (ohne Seite neu laden) ist die Meldung weg und es wird einfach so gelöscht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 04.12.09 12:04 
Der Code sieht äußerst fragil aus.
Ich kenne mich mit Webforms wie gesagt nicht aus (MVC entspricht eher meinem Verständnis eines Webframeworks ;) ), aber es muss doch möglich sein, das onClick-Attribut sofort jedem Löschen-Button zuzuweisen.

_________________
>λ=
gage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 04.12.09 17:41 
Das Erste Problem hat sich erledigt:

Ich habe eine PDF Datei im Netz gefunden die genau das Problem beschreibt und einen ganz einfachen Lösungsweg aufzeigt.
Man muss unter Fields auf Convert this field into a TemplateField gehen und dann noch etwas Code einfügen:

Ungefähr so sieht der Code dann aus:

ausblenden Quelltext
1:
<asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('Wirklich löschen');" Text="Delete"> </asp:LinkButton> </ItemTemplate> </asp:TemplateField>					


2. Problem

Ich versuche nun noch die den Button Aktualiesieren anzufügen. Diese machen kein Update der Tabelle. Daraufhin gehen meine Textboxen auf und zeigen mir meine Validation Controls an. hat da jemand eine idee was ich da Im Code geändert haben könnte.