DataGridView控件中添加DateTimePicker控件
首先定义两个变量:
DateTimePicker dtp = new DateTimePicker(); //实例化一个DateTimePicker控件 Rectangle _Rectangle;
然后添加如下代码:
private void AddDateTimePicker(DataGridView dgv, int addColumnCount) { dgv.Controls.Add(dtp); //将时间控件加入DataGridView dtp.Visible = false; //先不显示 dtp.Format = DateTimePickerFormat.Custom; //设置日期格式,2017-11-11 dtp.Checked = false; dgv.Columns[addColumnCount].ReadOnly = true; /*************时间控件选择时间时****************/ dtp.TextChanged += (sender, e) => { dgv.CurrentCell.Value = dtp.Text.ToString(); //时间控件选择时间时,将时间内容赋给所在的单元格 }; /****************单元格被单击,判断是否是放时间控件的那一列*******************/ dgv.CellClick += (sender, e) => { if (e.ColumnIndex == addColumnCount) { _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; }; /***********当列的宽度变化时,时间控件先隐藏起来,否则单元格宽高变化时时间控件无法跟着变***********/ dgv.ColumnWidthChanged += (sender, e) => { dtp.Visible = false; }; /***********滚动条滚动时,单元格位置发生变化,也隐藏时间控件,否则时间控件位置不动就乱了********/ dgv.Scroll += (sender, e) => { dtp.Visible = false; }; }