asp.net GridView手写事件,包括取主键、取值、更新、选择、删除

刚才在调整网站友情链接管理页面,里面有个简单的GridView。因为更改了架构,所以需要手工给GridView编写编辑、删除等事件。最近也经常碰到有人问我GridView的问题,于是写成经验之书以警后人。

图片是本网站后台的友情链接管理页面:

 

 

前两者的代码比较固定,一般都是:


 代码如下 复制代码
protected void gvFriendLink_RowEditing(object sender, GridViewEditEventArgs e){    gvFriendLink.EditIndex = e.NewEditIndex;    FetchData();}

protected void gvFriendLink_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){    gvFriendLink.EditIndex = -1;    FetchData();}

其中,FetchData()是给GridView绑定数据的方法。EditIndex = -1的意思是退出编辑模式。

2. 在RowUpdating事件中的取值问题

2.1 取不到值

如果你直接访问GridView.Row[i].Cell[j].Text是没用的。因为在编辑模式下,这个Cell里其实是有控件的,在这个例子里是个TextBox。所以我们需要强制类型转换一下:


 代码如下 复制代码
protected void gvFriendLink_RowUpdating(object sender, GridViewUpdateEventArgs e){    GeekStudio.ORM.Model.FriendLink model = new GeekStudio.ORM.Model.FriendLink()    {        Id = Convert.ToInt32(((TextBox)gvFriendLink.Rows[gvFriendLink.EditIndex].Cells[1].Controls[0]).Text),        Title = ((TextBox)gvFriendLink.Rows[gvFriendLink.EditIndex].Cells[2].Controls[0]).Text,        Url = ((TextBox)gvFriendLink.Rows[gvFriendLink.EditIndex].Cells[3].Controls[0]).Text,        OrderId = Convert.ToInt32(((TextBox)gvFriendLink.Rows[gvFriendLink.EditIndex].Cells[4].Controls[0]).Text)    };

optFriendLink.Update(model);

gvFriendLink.EditIndex = -1;    FetchData();}

2.2 取不到新值

如果你在GridView编辑的时候,明明填写了新值,更新之后却不变,比如单元格里原先是abc,你编辑的时候写了abcd,走到更新事件中,获取的值还是abc。这时候你要检查,你是不是忘记判断页面PostBack了?

解决办法:把数据绑定方法写在if(!Page.IsPostBack)里面


 代码如下 复制代码
protected void Page_Load(object sender, EventArgs e){    if (!Page.IsPostBack)    {        FetchData();                }}

protected void FetchData(){    gvFriendLink.DataSource = optFriendLink.GetModelList(0);    gvFriendLink.DataBind();}

3. 手写删除事件

做删除操作,我们只要编写RowDeleting事件就可以:


 代码如下 复制代码
protected void gvFriendLink_RowDeleting(object sender, GridViewDeleteEventArgs e){    int id = Convert.ToInt32(gvFriendLink.Rows[e.RowIndex].Cells[1].Text);    optFriendLink.Delete(id);    FetchData();}

4. 获取主键的办法

细心的童鞋会发现,在刚才的删除事件中,我获取主键的方法非常傻逼,居然是直接访问Cells[1],也就是第二个单元格的值。但很多时候,项目里要求GridView上不能显示数据库中的主键字段,怎么办呢?

其实GridView自带访问主键的属性,叫做DataKey。

为了用这个属性,你首先得给GridView指定一个DataKeyName

然后在代码里你就可以访问某行对应的主键了:


 代码如下 复制代码
int id = Convert.ToInt32(gvFriendLink.DataKeys[e.RowIndex].Value);

5. GridView中选取某行的操作

我的友情链接模块没有这个需求,所以给贴一个以前做的选课系统里的例子:


 代码如下 复制代码
protected void gvCourses_SelectedIndexChanged(object sender, EventArgs e){    int userId = uid;    int courseId = Convert.ToInt32(gvCourses.SelectedRow.Cells[0].Text);    dalUca.Add(new Course.Model.UserCourseAssociation() { UserId = userId, CourseId = courseId });    FetchAllCourse();    FetchUserCourse(userId);}

其实就是一个SelectedIndexChanged事件。但前提是你的GridView里必须有某个按钮可以触发这个事件:

一般是一个Select Command:


 代码如下 复制代码
<asp:CommandField ShowSelectButton="True" />

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, gridview
, 代码
, 事件
, textbox
model
,以便于您获取更多的相关知识。

时间: 2024-08-02 21:14:28

asp.net GridView手写事件,包括取主键、取值、更新、选择、删除的相关文章

sqlserver-C#asp.net三层架构,怎么才能通过主键查询到相对应的记录

问题描述 C#asp.net三层架构,怎么才能通过主键查询到相对应的记录 类库代码如下: /// 把SqlDataReader对象中的数据读出到List中 /// 转换后的列表对象 private List GetUse(SqlDataReader reader) { List uselist = new List(); while (reader.Read()) { use.UName = reader["UName"].ToString(); use.Password = read

asp.net-asp:GridView不写button按钮选中一行数据并获取选中的值!

问题描述 asp:GridView不写button按钮选中一行数据并获取选中的值! <asp:TemplateField HeaderText="姓名" HeaderStyle-Width="150px"> <ItemTemplate> <asp:Label ID="Label6" runat="server" Text='<%# Eval("UserName") %&g

[ASP.NET]GridView触发SelectedIndexChanged事件

问题描述 搜索的时候没在这搜到答案,但看到有人提出了同样的问题,已结贴不能回复,我就把我在别处找到的文章转过来吧,希望能帮到小忙."好久没有搞ASP.Net了,发现有好多的东西都忘记了,现在在这里记录一下,以后用的时候可以拿出来看看关于Silverlight的记录现在实在是没有时间了,上个项目刚搞完,这个项目马上就来了,还得天天加班,一点空闲都没有,反正得抽点事件来整理一下废话不说了,整理一下首先在GridView中必须加上"选择"的按钮,然后在Page_Load中添加:pr

asp.net Gridview行绑定事件新体会_实用技巧

在网上搜了一下事件执行顺序,并经过测试在有分页的情况下是不正确的.事件执行顺序: 一.GridView 显示绑定的数据(默认为5行): 复制代码 代码如下: DataBinding RowCreated:Header[0] RowDataBound RowCreated:DataRow[1] RowDataBound RowCreated:DataRow[2] RowDataBound RowCreated:DataRow[3] RowDataBound RowCreated:DataRow[4

在ASP.NET 2.0中操作数据之十七:研究插入、更新和删除的关联事件_自学过程

导言 当使用GridView.DetailsView或FormView控件的内建插入.编辑或删除特征时,在用户添加一条新记录或更新/删除一条现在记录的过程中发生了多个步骤.正如我们之前一节里所讨论的,在GridView中编辑一行时,保存(Update)和取消(Cancel)按钮将取代编辑(Edit)按钮,并且绑定列转换成TextBox.在用户更新了数据并点击保存按钮之后,下述步骤在回传时执行: 1.该GridView控件根据当前编辑行的唯一标识字段(通过DataKeyNames属性)组装它的Ob

ASP.NET 2.0数据教程之十六: 概述插入、更新和删除数据

返回"ASP.NET 2.0数据教程目录" 导言 结束前面的几节,我们已经探讨过了如何使用GridView.DetailsView 和FormView控件来显示数据.这些控件简单地操作提供给它的数据.一般地,这 些控件通过使用一个数据源控件,例如ObjectDataSource来存取数据.我们已经 看过了ObjectDataSource是如何在ASP.NET页面和潜在的数据之间扮演一个代理的 角色.当一个GridView需要显示数据时,它调用ObjectDataSource的Selec

asp.net repeater手写分页实例代码_实用技巧

复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BLL; using Model; using System.Data.SqlClient; using System.Data; public partial class Test_Re

ASP.NET 2.0数据教程之十七: 研究插入、更新和删除的关联事件

返回"ASP.NET 2.0数据教程目录" 导言 当使用GridView.DetailsView或FormView控件的内建插入.编辑 或删除特征时,在用户添加一条新记录或更新/删除一条现在记录的过程中发生了 多个步骤.正如我们之前一节里所讨论的,在GridView中编辑一行时,保存 (Update)和取消(Cancel)按钮将取代编辑(Edit)按钮,并且绑定列转换成 TextBox.在用户更新了数据并点击保存按钮之后,下述步骤在回传时执行: 1.该GridView控件根据当前编辑行

在ASP.NET 2.0中操作数据之十六:概述插入、更新和删除数据_自学过程

导言 结束前面的几节,我们已经探讨过了如何使用GridView.DetailsView和FormView控件来显示数据.这些控件简单地操作提供给它的数据.一般地,这些控件通过使用一个数据源控件,例如ObjectDataSource来存取数据.我们已经看过了ObjectDataSource是如何在ASP.NET页面和潜在的数据之间扮演一个代理的角色.当一个GridView需要显示数据时,它调用ObjectDataSource的Select()方法,这个方法转而调用一个来自我们的业务逻辑层(BLL)