Public Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged
requestDGV.Rows(0).Cells("requestTimeOff").Value = (DateTimePicker1.Value)
DateTimePicker1.Visible = False
DateTimePicker1.Enabled = False
End Sub
Public Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged
requestDGV.Rows(0).Cells("requestTimeOff").Value = (DateTimePicker1.Value)
End Sub
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
If e.ColumnIndex = 8 Then 'CHECK IF IT IS THE RIGHT COLUMN
'SET SIZE AND LOCATION
Dim rect = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True)
DateTimePicker1.Size = New Size(rect.Width, rect.Height)
DateTimePicker1.Location = New Point(rect.X + 10, rect.Y + 76) 'USE YOU OFFSET HERE
DateTimePicker1.Visible = True
ActiveControl = DateTimePicker1
End If
End Sub
Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged
If DataGridView1.RowCount > 0 Then 'JUST TO AVOID FORM LOAD CRASH
DataGridView1.CurrentCell.Value = DateTimePicker1.Value.ToShortDateString
DateTimePicker1.Visible = False
End If
7条答案
按热度按时间8nuwlpux1#
您没有遗漏任何内置选项,但是可以同时创建
DataGridViewColumn
和DataGridViewCell
类的子类来承载您选择的任何控件。MSDN上的这篇文章更详细地解释了这个过程,甚至包括一些示例代码:
How to: Host Controls in Windows Forms DataGridView Cells
您也可以在Code Project上找到完整的范例:Generic DataGridView V2.0
enxuqcxy2#
一种策略是:
1.在选定单元格获得焦点时在其顶部绘制一个
DateTimePicker
1.用单元格的值水合dtp
1.当dtp的值更改时,将其镜像回单元格的值
1.并在单元格失去焦点时隐藏DTP
下面是使用布局策略处理网格事件的方法:
下面是添加了DataGridView的窗体的基本设置
注意:当dtp具有焦点时,此方法当前不处理键盘事件,并且在窗体四处移动时也不处理调整大小或重画
ppcbkaq53#
也许这是不正确的,但简单的技巧和相同的结果.........少了很多代码......我只是玩玩,虽然在盒子外面,只是设置
我隐藏我的直到他们点击单元格,或者你可以显示第一我宣布:
当您单击单元格时,运行以下代码...
然后下方
超级基本型,我直接把它放在盒子里,看起来没有什么不合适的
或者超级简单模式.......我只是喜欢隐藏我的,直到列点击
您真的只需要一行.....数据将在网格中,只是少了很多代码.....
wd2eg0qa4#
好的......使用一些@rajat和@Aaron的例子,我做了一个在DateTimePicker单元格上弹出的例子。谢谢大家。
nkhmeac65#
若要解决在DataGridView中使用DateTimePicker时的某些输入问题,您需要将以下内容添加到上面引用的Microsoft示例中。搜索valuechanged事件未按预期激发的问题花费了相当长的时间。修复程序来自此处(stackoverflow)并翻译成下面的C#。在这里添加这些信息似乎是合适的,因为我在DataGridView和DateTimePicker上搜索时一直找到这个论坛帖子。
rjjhvcjd6#
我认为DateTimePicker上的CloseUp事件更合适,因为更改的值在任何更改时都将触发,而CloseUp仅在选择整个日期时触发
vh0rcniy7#
使用如下所示的RowsAdded事件-
enter image description here