场景

在Winform中使用DataGridView实现添加一行、删除一行、上移一行、下移一行。

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

添加一行

  1. private void TaskViewEditHelper_OnAddStep(object sender, EventArgs e)
  2. {
  3.  
  4. DataGridViewRow dr = new DataGridViewRow();
  5. dr.CreateCells(this.dataGridView_Task_ViewEdit);
  6. dr.Cells[].Value = "公众号" + this.dataGridView_Task_ViewEdit.Rows.Count;
  7. dr.Cells[].Value = "霸道的程序猿";
  8. dr.Cells[].Value = "大量编程教程与资源";
  9. //this.dataGridView_Task_ViewEdit.Rows.Insert(0, dr); //添加的行作为第一行
  10. this.dataGridView_Task_ViewEdit.Rows.Add(dr);//添加的行作为最后一行
  11. }

效果

删除一行

  1. private void TaskViewEditHelper_OnRemoveStep(object sender, EventArgs e)
  2. {
  3. if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == )
  4. {
  5. XtraMessageBox.Show("请先选择删除步,单击第一列以选中行");
  6. }
  7. else
  8. {
  9. if (XtraMessageBox.Show("确定要删除选中步吗?") == System.Windows.Forms.DialogResult.OK)
  10. {
  11. foreach (DataGridViewRow dr in this.dataGridView_Task_ViewEdit.SelectedRows)
  12. {
  13. if (dr.IsNewRow == false)
  14. {
  15. //如果不是已提交的行,默认情况下在添加一行数据成功后,DataGridView为新建一行作为新数据的插入位置
  16. this.dataGridView_Task_ViewEdit.Rows.Remove(dr);
  17. }
  18. }
  19. }
  20. }
  21. }

效果

上移一行

  1. private void TaskViewEditHelper_OnUpStep(object sender, EventArgs e)
  2. {
  3.  
  4. if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == )
  5. {
  6. XtraMessageBox.Show("请先选择一行,单击第一列以选中行");
  7. }
  8. else
  9. {
  10. if (this.dataGridView_Task_ViewEdit.SelectedRows[].Index <= )
  11. {
  12. XtraMessageBox.Show("此行已在顶端,不能再上移!");
  13. }
  14. else
  15. {
  16. //注意:这里是非绑定数据情况的上移行
  17. // 选择的行号
  18. int selectedRowIndex = GetSelectedRowIndex(this.dataGridView_Task_ViewEdit);
  19. if (selectedRowIndex >= )
  20. {
  21. // 拷贝选中的行
  22. DataGridViewRow newRow = dataGridView_Task_ViewEdit.Rows[selectedRowIndex];
  23. // 删除选中的行
  24. dataGridView_Task_ViewEdit.Rows.Remove(dataGridView_Task_ViewEdit.Rows[selectedRowIndex]);
  25. // 将拷贝的行,插入到选中的上一行位置
  26. dataGridView_Task_ViewEdit.Rows.Insert(selectedRowIndex - , newRow);
  27. dataGridView_Task_ViewEdit.ClearSelection();
  28. // 选中最初选中的行
  29. dataGridView_Task_ViewEdit.Rows[selectedRowIndex - ].Selected = true;
  30. }
  31. }
  32. }
  33. }

注:

这里是没绑定数据源情况下的上移一行,添加的一行时通过是上面新增的方法实现的。

此时dataGridView的dataSource是为空的。

其中用到获取选中行的方法:

  1. private int GetSelectedRowIndex(DataGridView dgv)
  2. {
  3. if (dgv.Rows.Count == )
  4. {
  5. return ;
  6. }
  7. foreach (DataGridViewRow row in dgv.Rows)
  8. {
  9. if (row.Selected)
  10. {
  11. return row.Index;
  12. }
  13. }
  14. return ;
  15. }

效果

下移一行

  1. private void TaskViewEditHelper_OnDownStep(object sender, EventArgs e)
  2. {
  3. if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == )
  4. {
  5. XtraMessageBox.Show("请先选择一行,单击第一列以选中行");
  6. }
  7. else
  8. {
  9. if (this.dataGridView_Task_ViewEdit.SelectedRows[].Index >= this.dataGridView_Task_ViewEdit.Rows.Count - )
  10. {
  11. XtraMessageBox.Show("此行已在底端,不能再下移!");
  12. }
  13. else
  14. {
  15. int selectedRowIndex = GetSelectedRowIndex(this.dataGridView_Task_ViewEdit);
  16. if (selectedRowIndex < dataGridView_Task_ViewEdit.Rows.Count - )
  17. {
  18. // 拷贝选中的行
  19. DataGridViewRow newRow = dataGridView_Task_ViewEdit.Rows[selectedRowIndex];
  20. // 删除选中的行
  21. dataGridView_Task_ViewEdit.Rows.Remove(dataGridView_Task_ViewEdit.Rows[selectedRowIndex]);
  22. // 将拷贝的行,插入到选中的下一行位置
  23. dataGridView_Task_ViewEdit.Rows.Insert(selectedRowIndex + , newRow);
  24. dataGridView_Task_ViewEdit.ClearSelection();
  25. // 选中最初选中的行
  26. dataGridView_Task_ViewEdit.Rows[selectedRowIndex + ].Selected = true;
  27. }
  28. }
  29. }
  30.  
  31. }

效果

DataGridView怎样实现添加、删除、上移、下移一行的更多相关文章

  1. js操作table中tr的顺序,实现上移下移一行的效果

    总体思路是在table外部加个div,修改div的innerHtml实现改变tr顺序的效果 具体思路是 获取当前要移动tr行的rowIndex,在table中删除掉,然后循环table的rows,到了 ...

  2. Entity framework 绑定到Datagridview的添加删除修改

    Entity framework 绑定到Datagridview的添加删除修改 using System; using System.Collections.Generic; using System ...

  3. Linux sed命令操作 删除文件每一行的前k个字符、在文本的行尾或行首添加字符

    删除文件每一行的前k个字符 $ cat tmp.txt # 删除每行第一个字符 $ sed 's/.//' tmp.txt # 删除每行前两个字符 $ sed 's/..//' tmp.txt # 删 ...

  4. AngularJS实现数据列表的增加、删除和上移下移等功能实例

      转: http://www.jb51.net/article/91991.htm 这篇文章给大家分享了AngularJS循环实现数据列表的增加.删除和上移下移等基础功能,对大家学习AngularJ ...

  5. table中实现数据上移下移效果

    html 由于vue+Element项目中的table,没有开放的上移下移的api,但是能对数据操作,故思路为数组中的一条数据,再重新添加一条数据,办法有点笨,但是好歹也是实现了,望有好的办法的,请留 ...

  6. jqGrid添加删除功能(不和数据库交互)

    jqGrid添加删除功能(不和数据库交互) 一.背景需求 项目中需要在前端页面动态的添加行,删除行,上下移动行等,同时还不和数据库交互.一直在用jqGrid展示表格的我们,从没有深入的研究过它,当然看 ...

  7. 用Javascript动态添加删除HTML元素实例 (转载)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. DHTMLX 前端框架 建立你的一个应用程序 教程(十一)--添加/删除表格中的记录

    添加/删除表格中的记录 我们的最终功能是在表格中添加删除 我们通过单机工具栏上的按钮来实现添加删除 当我们单击添加按钮的时候, 表单中 第一行默认填写New contact 光标自动聚焦 当用户点击删 ...

  9. JS添加删除一组文本框并对输入信息加以验证

    在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很多组方案,比如“满100打5折,满200打4折,满500打3 ...

随机推荐

  1. freemarker从入门到精通

    目录 一:概述 二:Freemarker的Helloworld 三:freemarker模板语法 1.访问map中的key 2.访问POJO中的属性 3.取集合中的数据 4.判断 5.日期 6.Nul ...

  2. Linux CentOS上安装 MySQL 8.0.16

    前言: 因为我需要在我新安装的Linux CentOS系统服务器中安装和配置MySQL服务器,然而对于我们这种Linux使用小白而言在Linux系统中下载,解压,配置MySQL等一系列的操作还是有些耗 ...

  3. PHP简单判断当前使用的是什么浏览器

    PHP简单判断当前使用的是什么浏览器,判断浏览器类型的方法,方便统计网站访问用户使用浏览器的比例. 判断浏览器类型方法 function userBrowser() { $user_OSagent = ...

  4. 1.1选择select

    一.核心(Core) 1.1选择 1.1.1 d3.select(selector) ​ 选择第一个与指定字符串selector匹配的元素,如果没有就返回空. 例如: <table> &l ...

  5. Linux 释放cache

    sysc 将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node.已延迟的块 I/O 和读写映射文件 echo 3 > /proc/sys/vm/drop_caches To free p ...

  6. 【H5最强攻略】百度人脸情绪实时识别

    最近看的各位大佬都在体验百度大脑2019年全新上线的24项AI能力! (我也按耐不住了,赶紧走一波- 哈哈) 接下来要介绍的就是H5端的人脸检测攻略. 附带详细的介绍,代码,以及演示体验等 欢迎提出各 ...

  7. 如何在在手机上安装linux(ubuntu )关键词:Termux

    目录 Termux软件 @(如何在在手机上安装ubuntu 关键词:Termux) Termux软件 Termux是一款开源且不需要root,运行在Android终端上极其强大的linux模拟器. 首 ...

  8. WePy框架的使用

    基本示例 import wepy from 'wepy';//引入wepy框架说明 // 通过继承自wepy.page的类创建页面逻辑 export default class Index exten ...

  9. 使用 TSPITR 恢复删除的表空间的步骤 (Doc ID 1277795.1)

    Steps To Recover A Dropped Tablespace Using TSPITR (Doc ID 1277795.1) APPLIES TO: Oracle Database - ...

  10. CCPC2018-湖南全国邀请赛

    传送门 A - Easy \(h\)-index 签到. Code /* * Author: heyuhhh * Created Time: 2019/10/29 11:58:23 */ #inclu ...