Laden...

Gridview Problem (editieren/updaten)

Erstellt von Tib86 vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.532 Views
Thema geschlossen
T
Tib86 Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren
Gridview Problem (editieren/updaten)

Hallo Zusammen,

bin noch relativ frisch in c#. Erfahrungen hab ich bis jetzt in der .NET umgebung nur mit VB.NET gemacht. In der Suche hier habe ich leider nichts gefunden. Ich bemühe mich schon zwei Tage mit google und msdn ab wie man bei einer Datagridview die daten editieren und dann wieder in die datenbank schreiben kann.
Mein erster Versuch war mit VB.NET und hat bis auf das updaten auch gut geklappt.
Ich will es aber mit C# versuchen und habe das Problem, dass ich nichtmal auf den Bearbeiten-Button klicken kann.
Sofort kommt bei Edit:

[HttpException (0x80004005): Die GridView GridView1 löste das Ereignis RowEditing aus, das nicht behandelt wurde.]
System.Web.UI.WebControls.GridView.OnRowEditing(GridViewEditEventArgs e) +1321226
System.Web.UI.WebControls.GridView.HandleEdit(Int32 rowIndex) +43
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +611
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +207
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

Ich hab jedoch eine Methode deklariert.


        private void GridView1_RowEditing(object sender, System.Web.UI.WebControls.GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            update();
        }

Nun meine Frage: Wie stelle ich es am besten an, dass man den Button Bearbeiten nutzen kann und die Daten dann in der Gridview und in der DB(SQL-Server) aktualisiert werden?
Bzw wie kriege ich die alten Werte und die neuen Werte die bearbeitet wurden???

Ich hab mal mein C# Versuch angehängt. Ich kann leider (oder gott sei dank?) keine zusammengeklickte Lösung verwenden, da es mehrere Eingaben gibt und je nachdem ein anderer select Befehl aufgerufen wird. Das ist nur ein kleiner Ausschnitt. In wirklichkeit sind es 7 Mögliche Eingabefelder und jeweils ein anderer select....

Ich bin langsam echt am verzweifeln... So schwer kann das doch nicht sein 😦((

Vielen Dank schon einmal im Vorraus und Gruß Tib86

458 Beiträge seit 2007
vor 13 Jahren
  1. Ist
sql = "select id,name,adresse from adressen where name = '" + Name.Text + "'";

ganz ganz schlechter Stil, hier laeufst du Gefahr Opfer einer SQl-Injection zu werden.

  1. Hast du zwar den EventHandler geschrieben, ihn der GridView fuer den OnRowEditing-Event aber nicht registriert.

be the hammer, not the nail!

T
Tib86 Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

Hi,

zu 1. ja ich weiss du hast recht. Das soll auch nur ein erster Versuch sein.

zu 2. Wie registriere ich denn den RowEditing-Event richtig in der Gridview?

habe nun hinzugefügt:


       <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" EnableModelValidation="True" ForeColor="#333333" 
        GridLines="None" onrowcancelingedit="GridView1_RowCancelingEdit"

        onrowediting="GridView1_RowEditing"

        onrowupdating="GridView1_RowUpdating"

        onrowdeleting="GridView1_RowDeleting">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <Columns>
            <asp:BoundField DataField="id" HeaderText="id" />
            <asp:BoundField DataField="name" HeaderText="name" />
            <asp:BoundField DataField="adresse" HeaderText="addresse" />
            <asp:CommandField ButtonType="Button" ShowEditButton="True" />
            <asp:CommandField ButtonType="Button" ShowDeleteButton="True" />
        </Columns>
        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    </asp:GridView>

Nun spuckt er mir aber den Fehler aus:
Kompilierungsfehler
Beschreibung: Fehler bei der Kompilierung einer Ressource, die zur Verarbeitung dieser Anforderung erforderlich ist. Überprüfen Sie die folgenden spezifischen Fehlerdetails, und ändern Sie den Quellcode entsprechend.

Compilerfehlermeldung: CS0117: ASP.default_aspx enthält keine Definition für GridView1_RowCancelingEdit.

Und ich habe noch eine kleine Frage wenn das obige irgentwann mal klappen sollte. Wie kann ich bei dem Rowupdating auf die alten Werte und die Werte die der Anwender in die textbox schreibt zugreifen?

Bin momentan etwas überfordert 😦

Vielen Dank schon einmal

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Compilerfehlermeldung: CS0117: ASP.default_aspx enthält keine Definition für GridView1_RowCancelingEdit.

Die Fehlermeldung ist doch eindeutig. Du hast in Deiner Klasse im CodeBehind keinen Handler mit dem Namen GridView1_RowCancelingEdit.
Jeder Handler der deklarativ in der .aspx zugewiesen wird, muss auch im CodeBehind aktualisiert werden.

Zum Thema Daten: schau Dir mal das GridView.RowUpdating-Ereignis an.

Einen Handler dafür kannst Du mit OnRowUpdating analog zu den anderen Erignissen deklarativ zuweisen.
Schau Dir unbedingt die Doku an: GridView-Klasse, die "Hinweise"-Sektion ist zwar ellenlang, aber sehr aufschlussreich.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
Tib86 Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" EnableModelValidation="True" ForeColor="#333333" 
        GridLines="None"         
        onrowcancelingedit="GridView1_RowCancelingEdit"
        onrowediting="GridView1_RowEditing"
        onrowupdating="GridView1_RowUpdating"
        onrowdeleting="GridView1_RowDeleting" 
                OnRowCancelingEdit="RowCancelingEdit event handler"
    OnRowCommand="RowCommand event handler"
    OnRowCreated="RowCreated event handler"
    OnRowDataBound="RowDataBound event handler"
    OnRowDeleted="RowDeleted event handler"
    OnRowDeleting="RowDeleting event handler"
    OnRowEditing="RowEditing event handler"
    OnRowUpdated="RowUpdated event handler"
    OnRowUpdating="RowUpdating event handler"

Also muss ich das so da reinmachen? Kriege aber immer noch ein Fehler.... Sorry das ich vielleicht nerve, aber bin Einsteiger bei C# 😦

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo

Also muss ich das so da reinmachen?

Nein!
Erstens brauchst Du nur die Ereignisse zu benutzen, die Du auch benötigst. Den Rest kannst Du einfach weglassen. Wann welches Ereignis ausgelöst wiurd, kannst Du der oben verlinkten MSDN-Seite entnehmen.

Zweitens: Bei OnRowCreated="RowCreated event handler" muss RowCreated event handler durch den Namen Deines Handlers ersetzt werden, z. B. "GridView1_RowCreated". Alle Handler, die Du so angibst, musst Du im CodeBehind (der .aspx.cs-Datei) implementieren.

Drittens könnte für Dich noch interessant sein:
[FAQ] Wie finde ich den Einstieg in C#?

Bitte beachte aber auch [Hinweis] Wie poste ich richtig? (Punkte 1.1 und 1.1.1)

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
Tib86 Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

Hi,

danke für die Info. Bin auch weitergekommen. Jedoch komme ich gerade nicht an die Textboxen dran.
Bei MSDN und anderen seiten gibt ja ja codebeispiele. Die wollen aber nicht funktionieren....

Hab mal die Fehlermeldung in den anhang gepackt...

Hinweis von MarsStein vor 13 Jahren

Hättest Du den Link zum RowUpdating-Ereignis aufmerksam gelesen, wärst Du von selbst auf die GridViewUpdateEventArgs gestossen, die hier zu verwenden sind.
Bitte setze Dich mit der Doku auseinander, das ist sehr wichtig und kann vom Forum nicht ersetzt werden.
--> geschlossen wegen [Hinweis] Wie poste ich richtig? Punkt 1.1

Thema geschlossen