C#--DataGridView添加DateTimePicker时间控件

DavidsCorner 2017-11-29

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Test

{

public partial class Form1: Form

{

DateTimePicker dtp = new DateTimePicker(); //实例化一个DateTimePicker控件

Rectangle _Rectangle;

public Form1()

{

InitializeComponent();

dataGridView1.Controls.Add(dtp); //将时间控件加入DataGridView

dtp.Visible = false; //先不显示

dtp.Format = DateTimePickerFormat.Custom; //设置日期格式,2017-11-11

dtp.TextChanged += new EventHandler(dtp_TextChange); //为时间控件加入事件dtp_TextChange

}

/*************时间控件选择时间时****************/

private void dtp_TextChange(object sender, EventArgs e)

{

dataGridView1.CurrentCell.Value = dtp.Text.ToString(); //时间控件选择时间时,将时间内容赋给所在的单元格

}

/****************单元格被单击,判断是否是放时间控件的那一列*******************/

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{

if (e.ColumnIndex == 0)

{

_Rectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); //得到所在单元格位置和大小

dtp.Size = new Size(_Rectangle.Width, _Rectangle.Height); //把单元格大小赋给时间控件

dtp.Location = new Point(_Rectangle.X, _Rectangle.Y); //把单元格位置赋给时间控件

dtp.Visible = true; //显示控件

}

else

dtp.Visible = false;

}

/***********当列的宽度变化时,时间控件先隐藏起来,否则单元格宽高变化时时间控件无法跟着变***********/

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)

{

dtp.Visible = false;

}

/***********滚动条滚动时,单元格位置发生变化,也隐藏时间控件,否则时间控件位置不动就乱了********/

private void dataGridView1_Scroll(object sender, ScrollEventArgs e)

{

dtp.Visible = false;

}

}

}

相关推荐