DataGridView怎样实现添加、删除、上移、下移一行
场景
在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怎样实现添加、删除、上移、下移一行的更多相关文章
- js操作table中tr的顺序,实现上移下移一行的效果
总体思路是在table外部加个div,修改div的innerHtml实现改变tr顺序的效果 具体思路是 获取当前要移动tr行的rowIndex,在table中删除掉,然后循环table的rows,到了 ...
- Entity framework 绑定到Datagridview的添加删除修改
Entity framework 绑定到Datagridview的添加删除修改 using System; using System.Collections.Generic; using System ...
- Linux sed命令操作 删除文件每一行的前k个字符、在文本的行尾或行首添加字符
删除文件每一行的前k个字符 $ cat tmp.txt # 删除每行第一个字符 $ sed 's/.//' tmp.txt # 删除每行前两个字符 $ sed 's/..//' tmp.txt # 删 ...
- AngularJS实现数据列表的增加、删除和上移下移等功能实例
转: http://www.jb51.net/article/91991.htm 这篇文章给大家分享了AngularJS循环实现数据列表的增加.删除和上移下移等基础功能,对大家学习AngularJ ...
- table中实现数据上移下移效果
html 由于vue+Element项目中的table,没有开放的上移下移的api,但是能对数据操作,故思路为数组中的一条数据,再重新添加一条数据,办法有点笨,但是好歹也是实现了,望有好的办法的,请留 ...
- jqGrid添加删除功能(不和数据库交互)
jqGrid添加删除功能(不和数据库交互) 一.背景需求 项目中需要在前端页面动态的添加行,删除行,上下移动行等,同时还不和数据库交互.一直在用jqGrid展示表格的我们,从没有深入的研究过它,当然看 ...
- 用Javascript动态添加删除HTML元素实例 (转载)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(十一)--添加/删除表格中的记录
添加/删除表格中的记录 我们的最终功能是在表格中添加删除 我们通过单机工具栏上的按钮来实现添加删除 当我们单击添加按钮的时候, 表单中 第一行默认填写New contact 光标自动聚焦 当用户点击删 ...
- JS添加删除一组文本框并对输入信息加以验证
在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很多组方案,比如“满100打5折,满200打4折,满500打3 ...
随机推荐
- 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...
- 使用VBA从工作表中读图片,以及给工作表中写文件
因为工作的原因,需要用到VBA,碰到读图片和写图片: Sub Macro01() '从工作表中保存图片 Application.ScreenUpdating = False Dim pth, shp, ...
- SQLServer之数据库表转化为实体类【带注释】
1.在开发过程中,有时候需要将数据库表转化为实体类.手敲除了不方便,还容易出错.本着DRY+懒人原则,参考了一位老司机的博客[见底部],并在其基础上进行了优化.[原先是不带注释的] DECLARE @ ...
- vue获取后端数据放在created还是mounted方法里面?
问题提出: 我们知道一般vue使用ajax或者axios来获取后端数据,并且好像放在created里面和mounted里面都可以获取数据并正确渲染.那么放在created里面和mounted里面有什么 ...
- 为什么老外不愿意用MyBatis?
作者:陈龙 www.zhihu.com/question/309662829 Spring 团队的Josh Long自己在Twitter上做了一个调查.1625次投票,样本量不算大,但也能说明问题.和 ...
- 洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...
- Android项目实战(五十八):Android 保存图片文件到本地,相册/图库查看不到的处理
将一个图片文件写入到本地目录,然后去相册查看,会查找不到这个图片文件,但是去文件目录下查找,确确实实有该图片文件. 问题在于相册是一个独立的app,它并不会去刷新本地图片,所以需要在写图片文件成功之后 ...
- RDIFramework.NET敏捷开发框架Web新增邮件中心实现便捷式的邮件收发
1.引言 邮件收发在很多业务系统中都有这样的需求,是比较正式和常用的功能.在我们的框架中提供了邮件中心功能模块,集内部邮件的收发.邮件归类.邮件星标的标记.邮件的删除与彻底删除等,邮件中心功能模块界面 ...
- Redis Cluster 集群三主三从高可用环境搭建
前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用. Window环境下载地址:https://github.com/tporadowski/redis ...
- 网络编程~~~C/S B/S 架构
C: client 客户端 B: browse 浏览器 S: server 服务器端 C/S架构: 基于客户端与服务端之间的通信 优点: 个性化设置, 响应速度快 缺点: 开发成本和维护成本高, 占用 ...