当前位置: 首页 > news >正文

20.3 使用技巧9

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

20.3.13 DataGridView使用日期选择控件

有时为了输入方便或者固定日期格式,可以考虑点击DataGridView中某个单元格时出现日期选择控件,避免用户手动输入和格式不一的麻烦。

【例 20A.2【项目:code20A-002】单元格点击使用日期选择控件。

        DateTimePicker dtp;

        //当前点击的行

        int rowindex;

        private void Form1_Load(object sender, EventArgs e)

        {

            dtp = new DateTimePicker();

            dtp.Visible = false;

            dgv.Controls.Add(dtp);

            //当日期选择控件下拉日历被关闭并消失时调用 dtpCloseUp 方法

            dtp.CloseUp += dtpCloseUp;

            //当日期选择控件失去焦点时调用 dtpLostFocus 方法

            dtp.LostFocus += dtpLostFocus;

        }

        private void dtpCloseUp(object sender, EventArgs e)

        {

            //设置日期选择控件不可见

            dtp.Visible = false;

            //再次判断选中的单元格是否只有一个

            if (dgv.SelectedCells.Count > 1)

                return;

            //再次判断选中的单元格是否在需要设置日期的列

            if (dgv.SelectedCells[0].ColumnIndex != 2)

                return;

            //设置单元格文本为选中的日期

            dgv[2, rowindex].Value = dtp.Text;

        }

        private void dtpLostFocus(object sender, EventArgs e)

        {

            dtp.Visible = false;

            dgv[2, rowindex].Value = dtp.Text;

        }

        private void dgv_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)

        {

            if (rowindex < 0)

                return;

            //如果对应列需要设置日期

            if (e.ColumnIndex == 2)

            {

                //由于已经固定是第2列,所以不再需要下列语句

                //columnindex = e.ColumnIndex

                //获得当前点击的行

                rowindex = e.RowIndex;

                string cellvalue = (string)dgv[e.ColumnIndex, e.RowIndex].Value;

                if (cellvalue == "" || cellvalue==null)

                    cellvalue = DateTime.Now.ToString();

                //当前点击的单元格的位置和大小

                Rectangle rect = dgv.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);

                //设置日期选择控件的位置和大小

                dtp.Top = rect.Top;

                dtp.Left = rect.Left;

                dtp.Width = rect.Width;

                dtp.Height = rect.Height;

                dgv.Controls.Add(dtp);

                dtp.Value = DateTime.Parse(cellvalue);

                dtp.Visible = true;

                //日期选择控件设置焦点

                dtp.Focus();

            }

        }

运行结果如下图所示:

图20A-2 DataGridView单元格使用日期选择控件

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

相关文章:

  • 回车键监听
  • NLP与社区检测算法的结合:文本中的社区发现
  • OpenCV 图形API(49)颜色空间转换-----将 NV12 格式的图像数据转换为 BGR 颜色空间函数NV12toBGR()
  • Linux进程5-进程通信常见的几种方式、信号概述及分类、kill函数及命令、语法介绍
  • flutter 专题 六十三 Flutter入门与实战作者:xiangzhihong8Fluter 应用调试
  • WINDOWS下使用命令行读取本地摄像头FFMPEG+DirectShow,ffplay直接播放摄像头数据
  • 安装ntfs硬盘系统时,报错Error: Unable to find a match: epel-release的解决方法
  • Federated Feature Augmentation and Alignment
  • ECharts散点图-散点图13,附视频讲解与代码下载
  • 机器学习-08-推荐算法-案例
  • Cad c# 射线法判断点在多边形内外
  • 淘宝店铺详情API接口返回数据说明
  • 精益数据分析(10/126):深度剖析数据指标,驱动创业决策
  • EXCEL学习
  • 天元证券|AI驱动需求井喷 光模块上市公司业绩爆发
  • Oracle for Linux安装和配置(11)——Linux配置
  • 深入理解 DML 和 DQL:SQL 数据操作与查询全解析
  • Spring Boot 集成 Redis 实战总结
  • 智能对讲机:通信技术的革新与“危急特”场景的守护者
  • 【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试
  • 世界读书日丨“好书最美”,国家图书馆举办读书日特别活动
  • 2025年度“沪惠保”今日开售:保费维持129元/人,进一步扩增国内外特药种类
  • 用了半年的洗衣机竟比马桶还脏,别再这样洗衣服了
  • 日本首相石破茂向靖国神社献祭品
  • 张宝亮任山东临沂市委书记
  • 金融监管总局:建立保险销售人员违法违规导致经济损失的佣金薪酬追索扣回机制