Zum Inhalt springen

GridView DeleteEvent


SeToY

Empfohlene Beiträge

Huhu,

ich habe das Problem, dass ich bei mir im GridView keine Rows Editieren, sowie löschen kann.

Mein Code:

Default.aspx:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AdventureWorksTest_sey._Default" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>


    </div>

    <asp:GridView ID="GridView1" runat="server" 

        AllowSorting="True" ShowFooter="True" 

        CellPadding="4" ForeColor="#333333" GridLines="Both">

        <RowStyle BackColor="#EFF3FB" />

        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />

        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />

        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

        <EditRowStyle BackColor="#2461BF" />

        <AlternatingRowStyle BackColor="White" />

    <Columns>

        <asp:CommandField ShowDeleteButton="true" DeleteImageUrl="~/images/page_delete.gif" ButtonType="Image" />

        <asp:CommandField ShowEditButton="true" EditImageUrl="~/images/page_edit.gif" ButtonType="Image" />

    </Columns>

        </asp:GridView>

    </form>

</body>

</html>

Default.aspx.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data.SqlClient;


namespace AdventureWorksTest_sey

{

    public partial class _Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            DataAccess da = new DataAccess();


            this.GridView1.Visible = true;

            GridView1.DataSource = da.getData();

            GridView1.DataBind();


        }

    }

}

DataAccess.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data;

using System.Data.SqlClient;


namespace AdventureWorksTest_sey

{


    public class DataAccess

    {


        public DataSet getData()

        {

            DataSet ds;


            string connection_string = "Data Source=IP.IP.IP.IP;Initial Catalog=AdventureWorks;Persist Security Info=True;User ID=USER;Password=PW";

            string sql = "SELECT VendorID, AccountNumber, Name, CreditRating, PreferredVendorStatus, PurchasingWebServiceURL, ModifiedDate FROM Purchasing.Vendor WHERE ActiveFlag = 1;";


            using (SqlConnection connection = new SqlConnection(connection_string))

            {

                SqlConnection con = new SqlConnection(connection_string); 

                ds = new DataSet(); 

                SqlDataAdapter da = new SqlDataAdapter(sql, con); 

                da.SelectCommand.CommandType = CommandType.Text;  

                da.Fill(ds); 


            }

            return ds;

        }




    }


}

Wenn ich nun im Grid auf löschen oder editieren klicke:

Server Error in '/' Application.

--------------------------------------------------------------------------------


The GridView 'GridView1' fired event RowEditing which wasn't handled. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 


Exception Details: System.Web.HttpException: The GridView 'GridView1' fired event RowEditing which wasn't handled.


Source Error: 


An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  


Stack Trace: 



[HttpException (0x80004005): The GridView 'GridView1' fired event RowEditing which wasn't handled.]

   System.Web.UI.WebControls.GridView.OnRowEditing(GridViewEditEventArgs e) +1324462

   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





--------------------------------------------------------------------------------

Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3601 

Wie kann ich das beheben?

LG

SeToY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ja das kann ich mir vorstellen, dass hier ein Fehler ausgegeben wird...

Woher soll das GridView wissen wie es Änderungen oder Neueinträge verarbeiten soll?

Du gibst dem GridView nur ein DataSet mit, aber keine Informationen darüber wie er diese Dinge erledigen soll.

Die einfachste Lösung ist eine SqlDataSource wie im Folgenden gezeigt:


    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 

        DataKeyNames="f_id" DataSourceID="SqlDataSource1">

        <Columns>

            <asp:BoundField DataField="f_id" HeaderText="f_id" InsertVisible="False" 

                ReadOnly="True" SortExpression="f_id" />

            <asp:BoundField DataField="f_name" HeaderText="f_name" 

                SortExpression="f_name" />

            <asp:BoundField DataField="f_code" HeaderText="f_code" 

                SortExpression="f_code" />

        </Columns>

    </asp:GridView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 

        ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" 

        DeleteCommand="DELETE FROM [Firma] WHERE [f_id] = @f_id" 

        InsertCommand="INSERT INTO [Firma] ([f_name], [f_code]) VALUES (@f_name, @f_code)" 

        SelectCommand="SELECT [f_id], [f_name], [f_code] FROM [Firma]" 

        UpdateCommand="UPDATE [Firma] SET [f_name] = @f_name, [f_code] = @f_code WHERE [f_id] = @f_id">

        <DeleteParameters>

            <asp:Parameter Name="f_id" Type="Int32" />

        </DeleteParameters>

        <UpdateParameters>

            <asp:Parameter Name="f_name" Type="String" />

            <asp:Parameter Name="f_code" Type="String" />

            <asp:Parameter Name="f_id" Type="Int32" />

        </UpdateParameters>

        <InsertParameters>

            <asp:Parameter Name="f_name" Type="String" />

            <asp:Parameter Name="f_code" Type="String" />

        </InsertParameters>

    </asp:SqlDataSource>

In der Web.config trägst Du den Connectionstring ein. Etwa so:

    <appSettings/>

    <connectionStrings>

        <add name="TestConnectionString" connectionString="Data Source=Servername;Initial Catalog=Datenbankname;Integrated Security=True"

            providerName="System.Data.SqlClient" />

    </connectionStrings>

.

.

.

Dies ist eine einfache aber nicht wirklich empfehlenswerte Lösung. Besser wäre es ein stark typisiertes DataSet und eine ObjectDataSource zu nutzen.

Bei der SqlDataSource liegt der SQL-Code direkt in der .aspx-Seite und da sollte man auch nur Oberflächendinge abhandeln.

Ein stark typisiertes DataSet kannst Du über "Hinzufügen" im Visual Studio-Projekt (rechte Maustaste auf Projekt --> hinzufügen --> neues Element --> Daten --> DataSet) hinzufügen. Dies kann Dir automatisiert alle SQL Statements generieren die für Insert, Update und Delete benötigt werden.

Du kannst hier auch zusätzliche SQL-Befehle für eine Tabelle bzw. TableAdapter hinterlegen.

Aber das komplett zu erklären würde den Beitrag sprengen.

Hoffe das hilft Dir schon mal weiter!

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...