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

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#教程 目录

http://www.xdnf.cn/news/855.html

相关文章:

  • Linux:权限相关问题
  • 实验六- Linux网络管理
  • 【MySQL】MySQL中的数据类型详解
  • 【React】获取元素距离页面顶部的距离
  • Spark(20)spark和Hadoop的区别
  • 数据赋能(203)——原则与原理——原则方法
  • 应用层核心协议详解:HTTP, HTTPS, RPC 与 Nginx
  • 健康养生,开启新生活
  • 随机深林算法是分类还是回归?
  • Selenium的ActionChains:自动化Web交互的强大工具
  • 棉花糖实验新解
  • 《数据结构之美--双向链表》
  • 第十四届蓝桥杯 2023 C/C++组 飞机降落
  • 快充协议芯片XSP04D支持使用一个Type-C与电脑传输数据和快充取电功能
  • c++_csp-j算法 (4)
  • 国防科大清华城市空间无人机导航推理!GeoNav:赋予多模态大模型地理空间推理能力,实现语言指令导向的空中目标导航
  • LeetCode 热题100题解(Java版本)
  • 设计模式 建造者模式
  • git比较不同分支的不同提交文件差异
  • Floyd算法求解最短路径问题——从零开始的图论讲解(3)
  • ubuntu 22.04 安装和配置 mysql 8.0,设置开机启动
  • 11-DevOps-Jenkins Pipeline流水线作业
  • [SpringMVC]请求响应参数传递
  • 机器学习 Day13 Boosting集成学习方法: Adaboosting和GBDT
  • AOSP Android14 Launcher3——远程窗口动画关键类SurfaceControl详解
  • VR制作攻略:如何制作VR
  • 在kali中安装AntSword(蚁剑)
  • 【HDFS入门】深入解析DistCp:Hadoop分布式拷贝工具的原理与实践
  • Android Studio打开xml布局文件内存会快速增加如何设置
  • Spark-SQL与Hive