datagridview像excel一样实现下拉填充

背景:

之前收到需要在datagridview中设计统一填充功能的需求,类似excel的下拉填充,开始没想到怎么实现,就用了另一种途径(选中多行,编辑,enter,统一填充),但是因为操作上不为人所知,所以被称为“反人类”,哈哈哈

现在算是大概实现了,就是不知道方法是不是最好的,

设计思路:

1. datagridview在MouseMove事件中,检查鼠标是否位于选中单元格的右下角,如果是,则做填充标记,并改变鼠标为十字状态。

2. 在MouseDown事件中,如果是填充标记,则保持鼠标十字状态

3. 在MouseUp事件中,如果是填充标记,则填充所选单元格

代码:

 1         bool isFill = false;
 2         /// <summary>
 3         /// 鼠标移动时,检查是否在选中单元格右下角,若是,则变为十字,标记状态
 4         /// </summary>
 5         /// <param name="sender"></param>
 6         /// <param name="e"></param>
 7         private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
 8         {
 9             if (dataGridView1.SelectedCells.Count == 1)
10             {
11                 int rowIndex = dataGridView1.SelectedCells[0].RowIndex;
12                 int columnIndex = dataGridView1.SelectedCells[0].ColumnIndex;
13                 //返回单元格相对于datagridview的Rectangle
14                 Rectangle r = dataGridView1.GetCellDisplayRectangle(columnIndex, rowIndex, false);
15                 int x = r.X + r.Width;//单元格右下角相对于datagridview的坐标x
16                 int y = r.Y + r.Height;//单元格右下角相对于datagridview的坐标y
17                 if (Math.Abs(e.X - x) < r.Width / 10 && Math.Abs(e.Y - y) < r.Height / 5)
18                 {
19                     this.Cursor = System.Windows.Forms.Cursors.Cross;
20                     isFill = true;
21                 }
22                 else
23                 {
24                     isFill = false;
25                 }
26             }
27         }
28         /// <summary>
29         /// 若是十字填充,则鼠标弹起时,填充数据
30         /// </summary>
31         /// <param name="sender"></param>
32         /// <param name="e"></param>
33         private void dataGridView1_MouseUp(object sender, MouseEventArgs e)
34         {
35             if (isFill )
36             {
37                 isFill = false;
38                 if (dataGridView1.SelectedCells.Count > 1)
39                 {
40                     int count = dataGridView1.SelectedCells.Count;
41                     for (int i = 0; i < count-1; i++)
42                     {
43                         dataGridView1.SelectedCells[i].Value = dataGridView1.SelectedCells[count-1].Value;
44                     }
45                 }
46             }
47
48
49         }
50         /// <summary>
51         /// 若是十字填充,则鼠标按下时,保持状态
52         /// </summary>
53         /// <param name="sender"></param>
54         /// <param name="e"></param>
55         private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
56         {
57             if (isFill)
58             {
59                 this.Cursor = System.Windows.Forms.Cursors.Cross;
60             }
61         }

原文地址:https://www.cnblogs.com/zdyzmy/p/12128910.html

时间: 2024-10-15 13:18:47

datagridview像excel一样实现下拉填充的相关文章

excel两个下拉框相互关联

我有两列数据,录入了所有人的信息,一个是姓名,一个是编号 现在我想再做两个下拉框,一个是选择姓名的,一个是选择编号的,我希望我选择姓名后,编号自动对应到这个人的,如果我选择编号,那么姓名也自动对应过来.请教各位excel的达人们. 这个用VLOOKUP函数做更方便 假设是在A列写入了姓名,B列写入了编号 在C2单元格设置了下拉菜单可以选择姓名, 则在D2单元格写入公式 =VLOOKUP(C2,A:B,2,) 原文 http://zhidao.baidu.com/question/14945914

excel中添加下拉候选

这里简单记录下如何在Excel2013中添加下拉候选. 首先有个思路是,下拉候选也就意味着数据被限制在一个范围之内,因此应该联想到数据验证相关的设置. 选中单列或单元格,在[数据]下的[数据验证]中选择[数据验证],就可以进行相关的下拉候选框设置. 在[验证条件]中的[允许]选择[序列],并在[来源]中填入需要的下拉候选项,每个下拉候选项使用半角符号[,]间隔. 最后点击[确定]即可. "你应该有你的海阔天空,而我也不该频频顾后." 原文地址:https://www.cnblogs.c

C#动态给EXCEL列添加下拉选项

Microsoft.Office.Interop.Excel.Application excel=new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbooks workbooks=excel.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook=Workbooks.Add (Microsoft.Office.In

Excel 单元格下拉菜单

Excel的单元格设置下拉选项并填充颜色

如何在Excel的单元格中加入下拉选项 方法/步骤   第一步:打开excel文档,选中需加入下拉选项的单元格.  第二步:点击菜单中的"数据"->"数据有效性"->"数据有效性".   第三步:在弹出的页面中设置菜单下,点击"允许"下选择"序列"按钮.   第四步:在来源中输入单元格中需设置的下拉选项,用英文的逗号","隔开,然后点击确定按钮. 即可得到我们要的效果. 怎么

excel双击下拉制作(以及双击下拉字符超限处理)

最近,在项目的开发过程中,遇到了一个问题,自己要修改代码中的excel模板,有些列要处理成双击下拉的形式. excel制作双击下拉: 当然,我想,这对于大家来说是不难的,好实现,但是,我在制作的过程中遇到了一个棘手的问题,那就是下拉展示世界上所有的国家,嗯嗯,,,,,,世界上有很多个国家,我按照之前的方式设置了,但是报字符超限,,,,, 解决办法: 自定义引用列. 还是按照之前的方式进行引用,这样就能实现我们想要的效果. 原文地址:https://www.cnblogs.com/dongyaot

excel A到z 拉

任一单元格写入公式 =IF(ROW(A1)>26,"",CHAR(64+ROW(A1))) 或 =IF(ROW(A1)>26,"",SUBSTITUTE(ADDRESS(1,ROW(A1),4),1,)) 下拉填充公式

DataGridView单元格内容自动匹配下拉显示

页面显示数据使用的控件是ComponentFactory.Krypton.Toolkit中的KryptonDataGridView控件.在指定“商品”单元格中需要根据用户输入内容自动匹配数据库中商品信息,并且单元格处于编辑模式时显示一个查询图标的按钮,点击该按钮也将显示数据库中所有商品信息. KryptonDataGridView显示控件此处命名为kDGVIndentDetail; 用于下拉显示匹配内容的DataGridView命名为dgv; 1.建立一个DataGridView类型的页面变量用

Excel导出下拉框引用数据

namespace WebInfo { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { HSSFWorkbook workbook = new HSSFWorkbook();    HSSFSheet realSheet = (HSSFSheet)workbook.CreateSheet("Sheet xls"); HSS