asp.net 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。
然后在代码里你就可以访问某行对应的主键了:
代码如下 | 复制代码 |
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手写事件,包括取主键、取值、更新、选择、删除相关推荐
- c++ 手写堆 (包括建堆、排序、添加元素、删除元素)
快排和归并排序点这里 c++进阶之路 堆排序跟快排一样是原地操作的一种不稳定排序算法. 堆排序分为建堆和调整堆. 建堆是通过自底向上父节点和子节点两两比较并交换得到的,时间复杂度为O(n) 调整堆需要 ...
- 手写事件代理函数 (Delegated function)
'手写 ' 这个词 ,面试是不是听过无数遍呢 ! 今天我们来手写一个这样的事件委托函数 => function( parent, selector, type , handle) {} 你需 ...
- ASP.NET Core MVC 和 EF Core 教程 - 创建、读取、更新和删除
作者:Tom Dykstra 和 Rick Anderson Contoso 大学示例 web 应用程序演示如何使用 Entity Framework Core 和 Visual Studio 创建 ...
- 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )
文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 六.Activity 中测试上述框架 七.博客源码 一.消息中心 该消息中心是事件通信框架的核心代 ...
- Java手写线程池(不带返回值、带返回值)
文章目录 不带返回值 带返回值 不带返回值 public class MyThreadPool {private static final int DEFAULT_THREAD_NUM = 10;pr ...
- C语言手写快排算法,两个值时也可以使用哦!
最近刷leetcode经常碰到排序问题,大家都知道排序算法中快速排序是效率很高的算法,因此快排写法是必须要掌握的哦! 解题思路 利用快排对数组进行排序. 快排:冒泡排序的改良. 快排目标:将数组从大到 ...
- mysql即是主键又是外键怎么写_数据库 既是主键又是外键
数据蒋堂 | JOIN延伸 - 维度概念 谈到数据分析时常常会用到维度这个词,针对数据立方体的钻取.旋转.切片等操作都是围绕维度进行的,几乎所有的数据分析人员都知道并会运用这个术语,但要问及它的定义, ...
- ASP.net GridView控件(删除/更新功能)
一.说明 部分代码的运用放在以往的教程中,本部分只讲解删除/更新功能 二.前端 我们在其控件上添加事件: 红色为行删除事件 绿色为行更新事件 双击后,即可在后台自动生成对应的方法体 其代码显示: &l ...
- 综合案例——手写数字图像处理算法比较
手写数字图像识别各种算法的比较 1.准备工作 1.1.数据集介绍 使用到了两个手写数字的数据集: scikit-learn 中的手写数字数据集: mnist 中的手写数字数据集. 1.1.1.scik ...
最新文章
- 截取字符串slice(),substring() ,substr()。
- 文本框输入限制【不允许空格、只允许数字】
- 印度数据工厂驱动全球 AI 发展
- JSONObject与JSONArray的使用
- python的json dump_python中json.dump和json.dumps的区别
- 6-2-JSP基本语法
- 使用iScroll时,input等不能输入内容的解决方法
- java用正则表达式 编写简单词法分析器_500+ 精选 Java 面试题大放送
- html禁止手机截屏,[置顶] Android 应用内禁止截屏功能的实现
- vue html属性绑定,2、Vue元素属性的绑定以及HTML的绑定
- 家居有线网络布线方案(转)
- Nginx 编译参数详解/大全
- Origin在保存多因子箱线图模板时,怎样在下次应用时,直接使用RAW数据?
- 显示器色彩精度测试软件,色域和色彩精准度测试_液晶显示器_液晶显示器评测-中关村在线...
- svn 文件夹没有绿勾红感叹号图标
- 某计算机的存储器按字节编址,(12 分)某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB,主存(物 理)地址空间大小为 1M_搜题易...
- filename=文件夹名+filename (单个文件夹下的+Python)
- Android列表视图(ListView--SimpleAdapter)学习
- 电脑剪辑视频用什么工具?好用的视频剪辑工具推荐
- 图像处理课程大设计--汽车牌照自动识别
热门文章
- 计算机网络—停止等待协议(思维导图)
- [leetcode]169. 多数元素
- 2013年C++A:买不到的数目(互质数)
- 2019蓝桥杯C++B:等差数列(详解)
- 递归法:整数划分问题(怎么进行划分呢)
- Codeforces Round #518 (Div. 2): F. Knights(神题)
- Ubuntu不能挂载移动硬盘问题Error mounting /dev/sda1 at /media/XXXX: Command-line `mount -t ntfs -o
- 基数排序(稍微困难)
- [转] 面向对象编程 - 继承和多态
- 知名互联网公司系统架构图[第2期]