asp.net 中gridview删除和编辑如果同时存在,我做这个的时候开始老是报错,弄了好几天才弄好,后来才发现是一个小细节问题,跟大家一起分享一下 前台代码: <%@ Page Language="C#" MasterPageFile="~/Admin/Admin.Master" AutoEventWireup="true" CodeBehind="ArticleType_Manage.aspx.cs" Inherits="MyShopUI.Admin.ArticleTypeManage" Title="文章类别管理" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <a href="ArticleTypeAdd.aspx" mce_href="ArticleTypeAdd.aspx">[增加新类别] <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="ObjectDataSource1" ForeColor="#333333" GridLines="None" Width="425px" DataKeyNames="ArticleTypeID"> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <Columns> <asp:BoundField DataField="ArticleTypeID" HeaderText="No." SortExpression="ArticleTypeID" ReadOnly="True" ItemStyle-HorizontalAlign="Center" /> <asp:BoundField DataField="ArticleTypeName" HeaderText="类别名称" SortExpression="ArticleTypeName" ItemStyle-HorizontalAlign="Center" /> <asp:TemplateField HeaderText="操作" ShowHeader="False" ItemStyle-HorizontalAlign="Center"> <EditItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" Text="更新"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="取消"></asp:LinkButton> </EditItemTemplate> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="编辑"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete" Text="删除" OnClientClick="return confirm('确认删除吗?')"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#999999" /> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="MyShopModels.ArticleType" DeleteMethod="DeleteArticleType" SelectMethod="FindAllArticleType" TypeName="MyShopBLL.ArticleTypeManager" UpdateMethod="EditArticleType"></asp:ObjectDataSource> </a> </asp:Content> 业务逻辑层代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using MyShopDAL; using MyShopModels; namespace MyShopBLL { public class ArticleTypeManager { ArticleTypeServices mm = new ArticleTypeServices(); //查找所有文章类型 public List<ArticleType> FindAllArticleType() { return mm.FindAllArticleType(); } //删除文章类别 public void DeleteArticleType(ArticleType articleType) { mm.DeleteArticleType(articleType.ArticleTypeID); } //修改文章类别 public void EditArticleType(ArticleType articleType) { mm.EditArticleType(articleType); } /** 注意删除和修改的方法所带的参数类型要保持一致,即方法签名保持一致,否则删除的时候会报错 不能写成: public void DeleteArticleType(int articleTypeID) { mm.DeleteArticleType(articleTypeID); } public void EditArticleType(ArticleType articleType) { mm.EditArticleType(articleType); } */ } } 数据访问层代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using MyShopModels; namespace MyShopDAL { public class ArticleTypeServices { //查询所有的文章类别 public List<ArticleType> FindAllArticleType() { List<ArticleType> allArticleType = new List<ArticleType>(); string sql = "select * from dbo.TBL_articleType order by articleTypeID"; using (SqlDataReader reader = MySqlHelper.ExecuteReader(sql)) { while (reader.Read()) { ArticleType articleType = new ArticleType(); articleType.ArticleTypeID = (int)reader[0]; articleType.ArticleTypeName = reader[1] as string; //或: //articleType.ArticleTypeID = reader.GetInt32(0); //articleType.ArticleTypeName = reader.GetString(1); allArticleType.Add(articleType); } } return allArticleType; } //删除文章类别名称 public void DeleteArticleType(int articleTypeID) { string sql = "delete dbo.TBL_articleType where articleTypeID = @articleTypeID"; MySqlHelper.ExecuteNonQuery(sql, new SqlParameter("@articleTypeID", articleTypeID)); } //修改文章类别名称 public void EditArticleType(ArticleType articleType) { string sql = "update TBL_articleType set articleTypeName = @articleTypeName where articleTypeID =@articleTypeID"; MySqlHelper.ExecuteNonQuery(sql, new SqlParameter("@articleTypeName",articleType.ArticleTypeName), new SqlParameter("@articleTypeID",articleType.ArticleTypeID) ); } } }