SeToY Geschrieben 3. September 2009 Teilen Geschrieben 3. September 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.NETter Geschrieben 3. September 2009 Teilen Geschrieben 3. September 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.