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

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

 代码如下 复制代码
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" />

转载于:https://www.cnblogs.com/marslin/archive/2013/05/18/3085510.html

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

  1. c++ 手写堆 (包括建堆、排序、添加元素、删除元素)

    快排和归并排序点这里 c++进阶之路 堆排序跟快排一样是原地操作的一种不稳定排序算法. 堆排序分为建堆和调整堆. 建堆是通过自底向上父节点和子节点两两比较并交换得到的,时间复杂度为O(n) 调整堆需要 ...

  2. 手写事件代理函数 (Delegated function)

    '手写 ' 这个词 ,面试是不是听过无数遍呢 ! 今天我们来手写一个这样的事件委托函数 => function( parent, selector, type ,  handle)  {} 你需 ...

  3. ASP.NET Core MVC 和 EF Core 教程 - 创建、读取、更新和删除

    作者:Tom Dykstra 和 Rick Anderson Contoso 大学示例 web 应用程序演示如何使用 Entity Framework Core 和 Visual Studio 创建 ...

  4. 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )

    文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 六.Activity 中测试上述框架 七.博客源码 一.消息中心 该消息中心是事件通信框架的核心代 ...

  5. Java手写线程池(不带返回值、带返回值)

    文章目录 不带返回值 带返回值 不带返回值 public class MyThreadPool {private static final int DEFAULT_THREAD_NUM = 10;pr ...

  6. C语言手写快排算法,两个值时也可以使用哦!

    最近刷leetcode经常碰到排序问题,大家都知道排序算法中快速排序是效率很高的算法,因此快排写法是必须要掌握的哦! 解题思路 利用快排对数组进行排序. 快排:冒泡排序的改良. 快排目标:将数组从大到 ...

  7. mysql即是主键又是外键怎么写_数据库 既是主键又是外键

    数据蒋堂 | JOIN延伸 - 维度概念 谈到数据分析时常常会用到维度这个词,针对数据立方体的钻取.旋转.切片等操作都是围绕维度进行的,几乎所有的数据分析人员都知道并会运用这个术语,但要问及它的定义, ...

  8. ASP.net GridView控件(删除/更新功能)

    一.说明 部分代码的运用放在以往的教程中,本部分只讲解删除/更新功能 二.前端 我们在其控件上添加事件: 红色为行删除事件 绿色为行更新事件 双击后,即可在后台自动生成对应的方法体 其代码显示: &l ...

  9. 综合案例——手写数字图像处理算法比较

    手写数字图像识别各种算法的比较 1.准备工作 1.1.数据集介绍 使用到了两个手写数字的数据集: scikit-learn 中的手写数字数据集: mnist 中的手写数字数据集. 1.1.1.scik ...

最新文章

  1. 截取字符串slice(),substring() ,substr()。
  2. 文本框输入限制【不允许空格、只允许数字】
  3. 印度数据工厂驱动全球 AI 发展
  4. JSONObject与JSONArray的使用
  5. python的json dump_python中json.dump和json.dumps的区别
  6. 6-2-JSP基本语法
  7. 使用iScroll时,input等不能输入内容的解决方法
  8. java用正则表达式 编写简单词法分析器_500+ 精选 Java 面试题大放送
  9. html禁止手机截屏,[置顶] Android 应用内禁止截屏功能的实现
  10. vue html属性绑定,2、Vue元素属性的绑定以及HTML的绑定
  11. 家居有线网络布线方案(转)
  12. Nginx 编译参数详解/大全
  13. Origin在保存多因子箱线图模板时,怎样在下次应用时,直接使用RAW数据?
  14. 显示器色彩精度测试软件,色域和色彩精准度测试_液晶显示器_液晶显示器评测-中关村在线...
  15. svn 文件夹没有绿勾红感叹号图标
  16. 某计算机的存储器按字节编址,(12 分)某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB,主存(物 理)地址空间大小为 1M_搜题易...
  17. filename=文件夹名+filename (单个文件夹下的+Python)
  18. Android列表视图(ListView--SimpleAdapter)学习
  19. 电脑剪辑视频用什么工具?好用的视频剪辑工具推荐
  20. 图像处理课程大设计--汽车牌照自动识别

热门文章

  1. 计算机网络—停止等待协议(思维导图)
  2. [leetcode]169. 多数元素
  3. 2013年C++A:买不到的数目(互质数)
  4. 2019蓝桥杯C++B:等差数列(详解)
  5. 递归法:整数划分问题(怎么进行划分呢)
  6. Codeforces Round #518 (Div. 2): F. Knights(神题)
  7. Ubuntu不能挂载移动硬盘问题Error mounting /dev/sda1 at /media/XXXX: Command-line `mount -t ntfs -o
  8. 基数排序(稍微困难)
  9. [转] 面向对象编程 - 继承和多态
  10. 知名互联网公司系统架构图[第2期]