由於DataGridView內建的ColumnType裡面沒有DateTimePicker這個控制項。所以要實現一個輸入日期的列就比較麻煩了。通過以下方法可以往DataGridView加入DateTimePicker控制項。
首先,前端設計加入一個DataGridView控制項,命名為DataGridView1。(文/piikee)
然後,後台.cs檔案寫入以下代碼:
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 moonlight_treasure{ public partial class MyCount : Form { DateTimePicker dtp = new DateTimePicker(); //這裡執行個體化一個DateTimePicker控制項 Rectangle _Rectangle; public MyCount() { InitializeComponent(); dataGridView1.Controls.Add(dtp); //把時間控制項加入DataGridView dtp.Visible = false; //先不讓它顯示 dtp.Format = DateTimePickerFormat.Custom; //設定日期格式為2010-08-05 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; } }}