C# DataGridView 表格行(Row) 上下移动
https://blog.csdn.net/plato_2/article/details/17434715?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2.pc_relevant_default&utm_relevant_index=4
好像有用吧,但是太麻烦了
https://blog.csdn.net/xiaotaibai2008/article/details/8099348
(1)首先在form中添加一个DataGridView控件,将默认AllowDrop=false 的属性设置为True,否侧不能拖动!
(2)对DataGridView的对象实现非数据源的绑定,因为设置DataSource属性即当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行。
2.代码准备
(1)控制移动时鼠标的图形,否则是一个禁止移动的标识
private void dataGridView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
(2)控制拖动的条件,也可以自行放宽条件
private void dataGridView1 _CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
if ((e.Clicks < 2) && (e.Button == MouseButtons.Left))
{
if ((e.ColumnIndex == -1) && (e.RowIndex > -1))
dataGridView1.DoDragDrop(dataGridView1.Rows[e.RowIndex], DragDropEffects.Move);
}
}
(3)拖动后实现行的删除和添加,实现行交换位置的错觉
int selectionIdx = 0;
private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
int idx = GetRowFromPoint(e.X, e.Y);
if (idx < 0) return;
if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
{
DataGridViewRow row = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
dataGridView1.Rows.Remove(row);
selectionIdx = idx;
dataGridView1.Rows.Insert(idx, row);
}
}
private int GetRowFromPoint(int x, int y)
{
for (int i = 0; i < dataGridView1.RowCount; i++)
{
Rectangle rec = dataGridView1.GetRowDisplayRectangle(i, false);
if (dataGridView1.RectangleToScreen(rec).Contains(x, y))
return i;
}
return -1;
}
(4)控制被移动的行始终是选中行
private void kryptonDataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (selectionIdx > -1)
{
dataGridView1.Rows[selectionIdx].Selected = true;
dataGridView1.CurrentCell = dataGridView1.Rows[selectionIdx].Cells[0];
}
}
————————————————
版权声明:本文为CSDN博主「xiaotaibai2008」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaotaibai2008/article/details/8099348
C# DataGridView 表格行(Row) 上下移动的更多相关文章
- JQuery EasyUI DataGrid根据条件设置表格行样式(背景色)
1.javascript定义函数返回样式 <script type="text/javascript"> //根据条件设置表格行背景颜色 function setRow ...
- JS组件系列——Bootstrap Table 表格行拖拽
前言:之前一直在研究DDD相关知识,好久没更新JS系列文章了.这两天做了一个简单的业务需求,觉得效果还可以,今天在这里分享给大家,欢迎拍砖~~ 一.业务需求及实现效果 项目涉及到订单模块,那天突然接到 ...
- JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
前言:前天刚写了篇JS组件系列——Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行.博主用了半天时间研究了下,效果是出来了,但是感觉不尽 ...
- C# DataGridView显示行号的三种方法
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dgGrid_RowPostPaint( obj ...
- 从头开始一步一步实现EF6+Autofac+MVC5+Bootstarp极简前后台ajax表格展示及分页(二)前端修改、添加表格行点击弹出模态框
在前一篇中,由于不懂jquery,前端做的太差了,今天做稍做修改,增加一个跳转到指定页面功能,表格行点击样式变化.并且在表格中加入bootstarp的按钮组,按钮点击后弹出模态框,须修改common, ...
- 【转】DataGridView显示行号
ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...
- 兼容ie6及以上和firefox等标准浏览器的表格行滑过时背景色切换的效果
一.js代码——"tablehover.js" /** *②.表格单元行滑过时高亮样式动效组件封装 *oop形式封装交互动效类 *组件说明这个组件是为 ...
- 兼容ie6及以上的表格行滑过时背景色切换的效果
;(function(window){ var tb = document.getElementById('tablelist'); function trfocus(){//为了兼容IE ...
- 在Bootstrap开发框架中使用dataTable直接录入表格行数据
在Winform开发的时候,我们很多时候可以利用表格控件来直接录入数据,不过在Web上较少看到,其实也可以利用dataTable对象处理直接录入表格行数据,这个可以提高数据的录入方便,特别是在一些简单 ...
- Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
随机推荐
- Redis-过期删除策略和内存淘汰策略
简介.我们先来看如下几个问题: ①.如何设置Redis键的过期时间 ? ②.设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗 ? ③.如何设置Redis的 ...
- elemengui分页
<!-- 分页模块 --> <template> <div class="block" style="margin-top:20px&quo ...
- surging 集成SuperSocket预发布版本2.0
一.概述 周末在家试着扩展SuperSocket,因为之前都是只支持.net framework, 后面出现支持.NET CORE 的SuperSocket 2.0 ,然后集成进来和dotnetty ...
- Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板
2025跨平台ai实战electron35+vite6+arco仿DeepSeek/豆包ai流式打字聊天助手. electron-deepseek-chat:实战ai大模型对话,基于vue3.5+el ...
- C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- php版10大设计模式,软件工程必须掌握的姿势
作为一个半路出家的php萌新,在看公司老大们的代码时无时无刻不在感叹,老大就是老大,写的代码低耦合.易扩展,我怎么就想不出这写完美的实现方式,最近看了韩大佬的视频后才明白,原来这些都是业界前辈们总结提 ...
- requirejs的简单使用,requirejs报错Uncaught Error: Mismatched anonymous define() module: …
requirejs的简单使用 define()方法的3个参数: 参数1为模块名称(不填则以当前js的文件名定义一个匿名模块), 参数2为依赖项数组(可不填), 参数3为模块的实现 引入jQuery: ...
- CF1370C题解
本蒟蒻的第二篇题解,找题归功于教练 题目传送门 这道题目找好了规律很简单: 具体思路: 题目大意: 有一个正整数 nnn.两名玩家轮流操作.每次操作可以执行以下一种: 将 nnn 除以一个 nnn 的 ...
- ThinkPHP 中闭包在数组查询条件中的深度应用
一.闭包与数组条件的协同原理 在 ThinkPHP 的查询体系中,数组条件是构建查询逻辑的核心载体.当数组条件的值为闭包(Closure)时,框架会自动将其解析为动态子查询生成器,实现运行时按需构建 ...
- centos 7.8下载地址
随着7.9版本的正式版本的发布,7.8.2003版本逐渐被各大镜像站替换,取消. 7.8.2003版本的可以自行在华中科技大学的镜像站下载,这个地址也可能随时会失效,如果失效了同学们可以自行百度搜寻. ...