由于时间原因,再加之自己懒惰!好久没写博客了,今天写一篇关于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
}
三、控件日期选择改变操作
<pre name="code" class="csharp"> 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;
}原文:http://blog.csdn.net/ztzi321/article/details/44041839