场景

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

注:

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

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

实现

添加一行

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

效果

删除一行

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

效果

上移一行

private void TaskViewEditHelper_OnUpStep(object sender, EventArgs e)
{ if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == )
{
XtraMessageBox.Show("请先选择一行,单击第一列以选中行");
}
else
{
if (this.dataGridView_Task_ViewEdit.SelectedRows[].Index <= )
{
XtraMessageBox.Show("此行已在顶端,不能再上移!");
}
else
{
//注意:这里是非绑定数据情况的上移行
// 选择的行号
int selectedRowIndex = GetSelectedRowIndex(this.dataGridView_Task_ViewEdit);
if (selectedRowIndex >= )
{
// 拷贝选中的行
DataGridViewRow newRow = dataGridView_Task_ViewEdit.Rows[selectedRowIndex];
// 删除选中的行
dataGridView_Task_ViewEdit.Rows.Remove(dataGridView_Task_ViewEdit.Rows[selectedRowIndex]);
// 将拷贝的行,插入到选中的上一行位置
dataGridView_Task_ViewEdit.Rows.Insert(selectedRowIndex - , newRow);
dataGridView_Task_ViewEdit.ClearSelection();
// 选中最初选中的行
dataGridView_Task_ViewEdit.Rows[selectedRowIndex - ].Selected = true;
}
}
}
}

注:

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

此时dataGridView的dataSource是为空的。

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

        private int GetSelectedRowIndex(DataGridView dgv)
{
if (dgv.Rows.Count == )
{
return ;
}
foreach (DataGridViewRow row in dgv.Rows)
{
if (row.Selected)
{
return row.Index;
}
}
return ;
}

效果

下移一行

        private void TaskViewEditHelper_OnDownStep(object sender, EventArgs e)
{
if (this.dataGridView_Task_ViewEdit.SelectedRows == null || this.dataGridView_Task_ViewEdit.SelectedRows.Count == )
{
XtraMessageBox.Show("请先选择一行,单击第一列以选中行");
}
else
{
if (this.dataGridView_Task_ViewEdit.SelectedRows[].Index >= this.dataGridView_Task_ViewEdit.Rows.Count - )
{
XtraMessageBox.Show("此行已在底端,不能再下移!");
}
else
{
int selectedRowIndex = GetSelectedRowIndex(this.dataGridView_Task_ViewEdit);
if (selectedRowIndex < dataGridView_Task_ViewEdit.Rows.Count - )
{
// 拷贝选中的行
DataGridViewRow newRow = dataGridView_Task_ViewEdit.Rows[selectedRowIndex];
// 删除选中的行
dataGridView_Task_ViewEdit.Rows.Remove(dataGridView_Task_ViewEdit.Rows[selectedRowIndex]);
// 将拷贝的行,插入到选中的下一行位置
dataGridView_Task_ViewEdit.Rows.Insert(selectedRowIndex + , newRow);
dataGridView_Task_ViewEdit.ClearSelection();
// 选中最初选中的行
dataGridView_Task_ViewEdit.Rows[selectedRowIndex + ].Selected = true;
}
}
} }

效果

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. 损失函数--KL散度与交叉熵

    损失函数 在逻辑回归建立过程中,我们需要一个关于模型参数的可导函数,并且它能够以某种方式衡量模型的效果.这种函数称为损失函数(loss function). 损失函数越小,则模型的预测效果越优.所以我 ...

  2. Python3 获取系统资源

    cpu disk mem import osimport psutilos.chdir(os.getcwd()) #cpu def get_cpu_info(): cpu_percent=psutil ...

  3. 线程队列queue的使用

    其实线程队列queue跟进程Queue的用法一样. 一.先进先出 import queue q = queue.Queue() q.put('kobe') q.put('cxk') print(q.g ...

  4. 在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)

    研究如何使用Markdown你们可能要花好几天才能搞定,但是看我的文章或者下载了源码,你搞定一般在10分钟之内.我先给各位介绍下它: Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯 ...

  5. Selenium(十三):验证码的处理、WebDriver原理

    1. 验证码的处理 对于Web应用来说,大部分的系统在用户登录时都要求用户输入验证码.验证码的类型很多,有字母数字的.有汉字的,甚至还需要用户输入一道算术题的答案的.对于系统来说,使用验证码可以有效地 ...

  6. Java 的 IO 流

    接着上一篇的 “Java 的 File 类” 的随笔,在File类的基础上,我们就走进Java的IO流吧. 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在 ...

  7. Eclipse 的快捷键

    1. 代码折叠的快捷键,默认是: Ctrl+Shift+Numpad_Divede(小键盘的/号) Ctrl+Shift+Numpad_Multiply(小键盘的*号) 2.删除一行:Ctrl+D 3 ...

  8. 从零开始制作cli工具,快速创建项目脚手架

    背景 在工作过程中,我们常常会从一个项目工程复制代码到一个新的项目,改项目配置信息.删除不必要的代码. 这样做的效率比较低,也挺繁琐,更不易于分享协作. 所以,我们可以制作一个cli工具,用来快速创建 ...

  9. JavaScript基础6

    计时器 setInterval()   按照指定周期来调用函数或计算表达式     以毫秒计算 语法    setInterval(code,millisec[,“lang”]) code 要调用的函 ...

  10. 对cookie-parser的理解(签名、加密)

    1.为什么说要利用签名防止cookie被恶意篡改 我们在浏览器输入用户名和密码发送post请求到后端服务器,后端服务器验证合法,返回响应,并Set-Cookie为sessionid=***;usern ...