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

由于时间原因,再加之自己懒惰!好久没写博客了,今天写一篇关于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控件是设定好的,我们只是借助此效果。


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

      元宵节快乐!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值