由于时间原因,再加之自己懒惰!好久没写博客了,今天写一篇关于datagridview中如何实现时间控件的文章,算是继续自己的记录的习惯!

首先,我们知道datagridview中并不提供控件,因此,我们无法直接使用!对此我们可以进行如下操作,从而实现在datagridview中插入时间控件。

一、声明控件

我们首先要做的便是声明一个时间控件,这个不必详细多说了,有两种方式:

1、直接在工具栏中进行拖拽

2、在窗体的designer.cs文件中进行声明。

无论哪种方式,都可以,代码如下:

       private DateTimePicker date;
            // // date// this.date.Location = new System.Drawing.Point(230, 41);this.date.Name = "date";this.date.Size = new System.Drawing.Size(200, 25);this.date.TabIndex = 18;this.date.Visible = false;  //这里是让控件先进行隐藏this.date.ValueChanged += new System.EventHandler(this.date_ValueChanged);//该事件是对时间控件值改变时的操作,具体实现内容后边将进行说明。

这样,我们就将时间控件声明好了!

二、进行赋值

//全局变量
private DataGridViewTextBoxCell partytime;
private void gridX_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e){#region 如何显示入党时间控件
//date.left:表示控件在工作区距离左边的距离(像素)。该工作区指的是窗体。
//this.gridX.left:gridX是datagridview名字,这里是获得datagridview控件与工作区左边缘的距离,
//this.gridX.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).X:返回选择单元格的左边坐标,该坐标值是相对与datagridview左边距离
//这样我们就可以将时间控件的位置“画在”工作区中,你可以理解为我们拖着这个时间控件到了精确的位置。
date.Left = this.gridX.Left + this.gridX.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).X;
//该代码同上,只是获取的是上边的距离。这样实际我们就控制住了这个时间控件的左上角,至于大小我们可以自行设计。date.Top = this.gridX.Top + this.gridX.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Y;partytime = ((DataGridViewTextBoxCell)gridX.Rows[e.RowIndex].Cells["partyDate"]);//这里声明一个DataGridViewTextBoxCell用来获取datagridview中partydate那列现在的值。 if (e.ColumnIndex == 9)//获取所在列,注意datagridview中序号是从0开始的。{
//下面代码是让控件显示时间:1、若没有时间,则控件时间显示当前时间 2、若datagridview中有时间则显示具体时间。if (this.gridX.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null || this.gridX.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == ""){this.date.Value = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));this.date.Visible = true;}else{this.date.Value = Convert.ToDateTime(this.gridX.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);this.date.Visible = true;}}else{this.date.Visible = false;}#endregion}

三、控件日期选择改变操作

 private void date_ValueChanged(object sender, EventArgs e){this.dateTimePicker1.Visible = false;partytime.Value = this.date.Value;//时间控件值改变在将其复制给声明的那个DataGridViewTextBoxCell,然后进而改变datagridview相应列的值this.date.Format = DateTimePickerFormat.Custom;this.date.CustomFormat = "yyyy-MM-dd";//this.gridX.CurrentCell.Value = this.date.Value;//this.date.Visible = false;}

至此时间控件在datagridview中的插入完毕!

同理,其实你可以尝试其它控件到datagridview中,这里我在将numericupanddown控件加在datagirdview中的代码贴上:

一、声明控件

private System.Windows.Forms.NumericUpDown beginYear;//声明全局变量
// // beginYear// this.beginYear.Location = new System.Drawing.Point(0, 0);this.beginYear.Maximum = new decimal(new int[] {3000,0,0,0});this.beginYear.Minimum = new decimal(new int[] {2008,0,0,0});this.beginYear.Name = "beginYear";this.beginYear.Size = new System.Drawing.Size(120, 25);this.beginYear.TabIndex = 0;this.beginYear.Value = new decimal(new int[] {2015,0,0,0});this.beginYear.Visible = false;this.beginYear.ValueChanged += new System.EventHandler(this.beginYear_ValueChanged);

二、实现控件的位置精确定位

private DataGridViewTextBoxCell beginyear;
 beginYear.Left = gridX.Left + this.gridX.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).X;beginYear.Top = gridX.Top + this.gridX.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Y;beginyear = (DataGridViewTextBoxCell)(this.gridX.Rows[e.RowIndex].Cells["beginYear"]);if (e.ColumnIndex == 12){if (this.gridX.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null || this.gridX.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == DBNull.Value){beginYear.Value = System.DateTime.Now.Year;this.beginYear.Visible = true;}else{//beginYear.Value = Convert.ToDecimal(dataRow["beginYear"]);beginYear.Value = Convert.ToDecimal(this.gridX.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);this.beginYear.Visible = true;}}else{this.beginYear.Visible = false;}

这里有一点需要说明,要先精确定位在进行判断,之所以这么做是因为当有两个以上的该控件时会出现错误。具体原因我也不是很清楚!在这里也希望大家能给出原因,在此谢谢了!

三、将值赋值到datagridview中

 private void beginYear_ValueChanged(object sender, EventArgs e){beginyear.Value = this.beginYear.Value;// this.beginYear.Visible = false;}

this.beginYear.Visible=false;之所以删除是因为,当你点击一下向上或向下按钮时,此控件就消失了,这种效果并不是我们所要的。包括DateTimePicker控件,如果设置了此属性在这里,将会出现每当你点击选中无论是年份、月份、还是日都会消失,而去掉则会只有当你点击到具体的日时才会消失。这个效果当时是微软在定义DateTimePicker控件是设定好的,我们只是借助此效果。

再次给大家送上晚年祝福!!

元宵节快乐!

c#如何实现在datagridview中加入时间控件、numericupanddown控件相关推荐

  1. 实现DataGridView中同一列不同行控件类型的不同

    DataGridView中列的类型可分为DataGridViewTextBoxColumn.DataGridViewCheckBoxColumn .DataGridViewImageColumn .D ...

  2. c#winform演练 ktv项目 在dataGridView中显示歌曲列表

    c#winform演练 ktv项目 在dataGridView中显示歌曲列表 dgv控件绑定泛型数组 dgv对象.DataSource = 数据源 关于数据源,它可以是: 数据集中的某个表 泛型对象数 ...

  3. winfrom datagridview中DataGridViewTextBoxColumn的联动处理

    这个问题有两种方法 第一种是用DataGridview中自带的DataGridViewTextBoxColumn 控件,第二种是动态添加combobox控件方法一:首先 窗体上拖拽一个 DataGri ...

  4. Winform实现在DataGridView控件的单元格中添加多个控件

    Winform实现在DataGridView控件的单元格中添加多个控件 背景 实现思路 关键代码 完整代码下载 背景 DataGridView控件的列是支持TextBoxColumn.ComboBox ...

  5. Winform DataGridView单元格中动态添加多个控件

    简介: 在DataGridView的单元格中动态添加多个控件.例如在DataGridViewTextBox单元格中,添加CheckBox和Button控件.主题思路就是一个动态控件的大小,位置,显示, ...

  6. C#在WinForm中实现清空指定类型控件的内容

    实现在Winform中递归控件来清空指定类型控件的内容(因为在Winform中,各个控件是有层次关系的,不能简单地依靠遍历this.controls) private void ClearConten ...

  7. DataGridView中回车键的妙用

    在NET 中DataGridView 是 一个很好的控件,它提供了一个用于输入数据和显示数据的自定义表.如果你在你的程序中提供DataGridView 作为用户输入多行数据的一种方式,你或许希望重新定 ...

  8. DataGridView中实现点击单元格Cell动态添加自定义控件

    场景 鼠标点击DataGridView的某个单元格时,此单元格添加一个自定义的控件,这里以 添加下拉框为例 效果 注: 博客主页: https://blog.csdn.net/badao_liuman ...

  9. C# 导出dataGridView中的值到Excel

    方法/步骤 添加Office Excel引用,在.net下面. 程序代码引用:using Excel = Microsoft.Office.Interop.Excel; 添加事件控件"导出E ...

最新文章

  1. mysql 导出中间 数据_MYSQL数据库之间的数据导出与导入
  2. selenium教程
  3. C++在数字N中找到精确除以N的数字的算法(附完整源码)
  4. java类似sizeof_如何用Java编写类似C的Sizeof函数
  5. 那些我当了程序员以后才理解的崩溃瞬间!
  6. aop框架 php,xaop: 支持三种模式的AOP框架,弥补PHPer的不足,并且自带了文档的解析类库,可以一并使用,性能极好,欢迎 STAR 与 FORK。...
  7. 守住你自己的“沉香”
  8. LeetCode刷题(27)
  9. python一般的基础代码-Python:模块代码编写基础
  10. 07-0.部署 worker 节点
  11. 史上最全phpwind版本,从phpwind1.0到phpwind8所有版本和升级补丁包
  12. IDEA插件开发之基础篇
  13. css3箭头水平淡入淡出
  14. 输入三个整数a,b,c。并进行两两相加,最后比较相加和的最大值。
  15. 【python第3课】顺序、循环、分支
  16. 基于springboot+dubbo微服务开发的商城系统
  17. Mac 安装 LaTeX(MacTeX)
  18. PreScan快速入门到精通第三十四讲基于PreScan进行超声波雷达传感器仿真
  19. 数据库课程设计-图书馆管理系统(2.数据库实现-基于mysql)
  20. 自适应滤波器:递归最小二乘(RLS)

热门文章

  1. 什么是执行落地岗位_激发产品业务价值,用数据驱动理念落地
  2. 什么叫内部银团_MOS管和IGBT管有什么区别?
  3. logback logback.xml 常用配置详解
  4. 华硕电池管理软件_多模式无线电竞鼠标怎么选?华硕?ROG 烈刃2 上手体验
  5. python turtle画动物_如何用python画简单的动物
  6. Epic Games 携精彩作品强势登录 GMGC 2016
  7. 一份帮助你更好地理解深度学习的资源清单 1
  8. redis高级命令2
  9. 【学习笔记】HTML基础:使用html制作网页
  10. 自己手写代码实现下拉刷新(对于小项目第三方库太占资源)