如何:Windows窗体DataGridView单元中的主机控件 [英] How to: Host Controls in Windows Forms DataGridView Cells

查看:41
本文介绍了如何:Windows窗体DataGridView单元中的主机控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在datagridview中添加d​​atetimepicker。这是我试过的代码。

I want to add a datetimepicker in datagridview . This is the code i tried .

Imports 系统
Imports System.Windows.Forms

公共 CalendarColumn
继承 DataGridViewColumn

公开 Sub New ()
MyBase CalendarCell())
结束 < span style ="color:blue"> Sub 公共 覆盖 属性 CellTemplate() As DataGridViewCell
获取 返回 MyBase .CellTemplate
结束 获取 设置 ByVal As DataGridViewCell)

'确保用于模板的单元格是CalendarCell。 如果(值 IsNot Nothing AndAlso _
值。< span style ="color:blue"> GetType ()。IsAssignableFrom( GetType (CalendarCell))_
然后 抛出 InvalidCastException("必须是CalendarCell"
结束 如果 MyBase .CellTemplate = value

结束 设置 结束 属性 结束 公共 CalendarCell
继承 DataGridViewTextBoxCell

公共 Sub < span style ="color:blue"> New ()
'使用短日期格式。 .Style.Format = " d" 结束 公共 覆盖 Sub InitializeEditingControl( ByVal rowIndex 作为 整数,_
ByVal initialFormattedValue 作为 对象,_
ByVal dataGridViewCellStyle As DataGridViewCellStyle)

'将编辑控件的值设置为当前单元格值。 MyBase .InitializeEditingControl(rowIndex,initialFormattedValue,_
dataGridViewCellStyle)

昏暗 ctl 作为 CalendarEditingControl = _
CType (DataGridView.EditingControl ,CalendarEditingControl)
ctl.Value = CType Me .Value,DateTime)

结束 Sub 公共 覆盖 ReadOnly 属性 EditType() As 键入
获取 '返回CalendarCell使用的编辑控件的类型。 返回 GetType (CalendarEditingControl)
结束 获取 结束 属性 公共 覆盖 ReadOnly 属性 ValueType( ) As 键入
获取 '返回类型CalendarCell包含的值ns。 返回 GetType (DateTime)
结束 获取 结束 属性 公共 覆盖 ReadOnly 属性 DefaultNewRowValue()作为 对象 获取 '使用当前日期和时间作为默认值。 返回 DateTime.Now
结束 获取 结束 属性 结束 < span style ="color:blue">类 CalendarEditingControl
Inherits DateTimePicker
Implements IDataGridViewEditingControl

Private dataGridViewControl As DataGridView
私有 valueIsChanged 正如 布尔 = 错误 私人 rowIndexNum 作为 整数 公共 Sub New ()
Me 。格式= DateTimePickerFormat。 结束 Sub < span style ="color:blue">公共 属性 EditingControlFormattedValue()作为 对象 _
Implements IDataGridViewEditingControl.EditingControlFormattedValue

获取 返回 .Value.ToShortDateString()
End 获取 设置 ByVal As 对象
如果 TypeOf 字符串 然后 .Value = DateTime.Parse( CStr (值))
结束 如果 结束 设置 结束 属性 公共 函数 GetEditingControlFormattedValue( ByVal context _
As DataGridViewDataErrorContexts)作为 对象 _
实现 IDataGridViewEditingControl。 GetEditingControlFormattedValue

返回 .Value.ToShortDateString()

结束 功能 公共 Sub ApplyCellStyleToEditingControl( ByVal dataGridViewCellStyle As _
DataGridViewCellStyle)_
Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl

Me .Font = dataGridViewCellStyle.Font
Me .CalendarForeColor = dataGridViewCellStyle.ForeColor
Me .CalendarMonthBackground = dataGridViewCellStyle.BackColor

结束 Sub 公共 属性 EditingControlRowIndex()作为 整数 _
Implements IDataGridViewEditingControl.EditingControlRowIndex

获取 返回 rowIndexNum
< span style ="color:blue"> End 获取 设置 ByVal As 整数
rowIndexNum = value
结束 设置 结束 属性 公共 功能 EditingControlWantsInputKey( ByVal 作为键,_
ByVal dataGridViewWantsInputKey As 布尔作为 布尔 _
Implements IDataGridViewEditingControl.EditingControlWantsInputKey

'让DateTimePicker处理列出的键。 选择 案例 Keys.KeyCode
案例 Keys.Left,Keys.Up,Keys.Down,Keys.Right,_
Keys .Home,Keys。 End ,Keys.PageDown,Keys.PageUp

返回 True 案例 其他 返回 False 结束 选择 结束 功能 公共 Sub PrepareEditingControlForEdit( ByVal selectAll As < span style ="color:blue"> Boolean )_
Implements IDataGridViewEditingControl.PrepareEditingControlForEdit

'无需做任何准备。 结束 Sub Public ReadOnly Property RepositionEditingControlOnValueChange()_
As Boolean Implements _
IDataGridViewEditingControl。 RepositionEditingControlOnValueChange

获取 返回 False 结束 获取 结束 < span style ="color:blue">属性 公共 属性 EditingControlDataGridView() As DataGridView _
实现 IDataGridViewEditingC ontrol.EditingControlDataGridView

获取 返回 dataGridViewControl
End 获取 设置 ByVal As DataGridView)
dataGridViewControl = value
结束 设置 结束 属性 公共 属性 EditingControlValueChanged()作为 Boolean _
Implements IDataGridViewEditingControl.EditingControlValueChanged

获取 返回 valueIsChanged
结束 获取 设置 ByVal 作为 布尔
valueIsChanged = value
结束 设置 结束 属性 公共 ReadOnly 属性 EditingControlCursor() As Cursor _
Implements IDataGridViewEditingControl.EditingPanelCursor

获取 返回 MyBase .Cursor
结束 获取 结束 属性 受保护 覆盖 Sub OnValueChanged( ByVal eventargs As EventArgs)

'通知DataGridView内容单元格已更改。
valueIsChanged = True Me .EditingControlDataGridView.NotifyCurrentCellDirty ( True
MyBase .OnValueChanged(eventargs)

< span style ="color:blue">结束 Sub 结束 Class Public Class Form1
继承表单

私有 dataGridView1 As DataGridView()

< STAThreadAttribute()> _
公开 共享 Sub Main()
Application.Run( New Form1())
End < span style ="color:blue"> Sub 公共 Sub New ()
Me .dataGridView1.Dock = DockStyle.Fill
.Controls.Add( Me .dataGridView1)
。 Text = "DataGridView日历列演示" 结束 Sub 私有 Sub Form1_Load( ByVal sender 作为 对象,< span style ="color:blue"> ByVal e As EventArgs)_
句柄 .Load

Dim col As New CalendarColumn()
Me .dataGridView1.Columns。添加(col)
.dataGridView1.RowCount = 5
Dim 行< span style ="color:blue"> As DataGridViewRow
对于 每行 .dataGridView1.Rows
row.Cells(0).Value = DateTime.Now
下一步

结束 结束 Class

Imports System Imports System.Windows.Forms PublicClass CalendarColumn Inherits DataGridViewColumn PublicSubNew() MyBase.New(New CalendarCell()) EndSubPublicOverridesProperty CellTemplate() As DataGridViewCell GetReturnMyBase.CellTemplate EndGetSet(ByVal value As DataGridViewCell) ' Ensure that the cell used for the template is a CalendarCell.If (value IsNotNothing) AndAlso _ Not value.GetType().IsAssignableFrom(GetType(CalendarCell)) _ ThenThrowNew InvalidCastException("Must be a CalendarCell") EndIfMyBase.CellTemplate = value EndSetEndPropertyEndClassPublicClass CalendarCell Inherits DataGridViewTextBoxCell PublicSubNew() ' Use the short date format.Me.Style.Format = "d"EndSubPublicOverridesSub InitializeEditingControl(ByVal rowIndex AsInteger, _ ByVal initialFormattedValue AsObject, _ ByVal dataGridViewCellStyle As DataGridViewCellStyle) ' Set the value of the editing control to the current cell value.MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, _ dataGridViewCellStyle) Dim ctl As CalendarEditingControl = _ CType(DataGridView.EditingControl, CalendarEditingControl) ctl.Value = CType(Me.Value, DateTime) EndSubPublicOverridesReadOnlyProperty EditType() As Type Get' Return the type of the editing contol that CalendarCell uses.ReturnGetType(CalendarEditingControl) EndGetEndPropertyPublicOverridesReadOnlyProperty ValueType() As Type Get' Return the type of the value that CalendarCell contains.ReturnGetType(DateTime) EndGetEndPropertyPublicOverridesReadOnlyProperty DefaultNewRowValue() AsObjectGet' Use the current date and time as the default value.Return DateTime.Now EndGetEndPropertyEndClassClass CalendarEditingControl Inherits DateTimePicker Implements IDataGridViewEditingControl Private dataGridViewControl As DataGridView Private valueIsChanged AsBoolean = FalsePrivate rowIndexNum AsIntegerPublicSubNew() Me.Format = DateTimePickerFormat.ShortEndSubPublicProperty EditingControlFormattedValue() AsObject _ Implements IDataGridViewEditingControl.EditingControlFormattedValue GetReturnMe.Value.ToShortDateString() EndGetSet(ByVal value AsObject) IfTypeOf value IsStringThenMe.Value = DateTime.Parse(CStr(value)) EndIfEndSetEndPropertyPublicFunction GetEditingControlFormattedValue(ByVal context _ As DataGridViewDataErrorContexts) AsObject _ Implements IDataGridViewEditingControl.GetEditingControlFormattedValue ReturnMe.Value.ToShortDateString() EndFunctionPublicSub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As _ DataGridViewCellStyle) _ Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl Me.Font = dataGridViewCellStyle.Font Me.CalendarForeColor = dataGridViewCellStyle.ForeColor Me.CalendarMonthBackground = dataGridViewCellStyle.BackColor EndSubPublicProperty EditingControlRowIndex() AsInteger _ Implements IDataGridViewEditingControl.EditingControlRowIndex GetReturn rowIndexNum EndGetSet(ByVal value AsInteger) rowIndexNum = value EndSetEndPropertyPublicFunction EditingControlWantsInputKey(ByVal key As Keys, _ ByVal dataGridViewWantsInputKey AsBoolean) AsBoolean _ Implements IDataGridViewEditingControl.EditingControlWantsInputKey ' Let the DateTimePicker handle the keys listed.SelectCase key And Keys.KeyCode Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, _ Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp ReturnTrueCaseElseReturnFalseEndSelectEndFunctionPublicSub PrepareEditingControlForEdit(ByVal selectAll AsBoolean) _ Implements IDataGridViewEditingControl.PrepareEditingControlForEdit ' No preparation needs to be done.EndSubPublicReadOnlyProperty RepositionEditingControlOnValueChange() _ AsBooleanImplements _ IDataGridViewEditingControl.RepositionEditingControlOnValueChange GetReturnFalseEndGetEndPropertyPublicProperty EditingControlDataGridView() As DataGridView _ Implements IDataGridViewEditingControl.EditingControlDataGridView GetReturn dataGridViewControl EndGetSet(ByVal value As DataGridView) dataGridViewControl = value EndSetEndPropertyPublicProperty EditingControlValueChanged() AsBoolean _ Implements IDataGridViewEditingControl.EditingControlValueChanged GetReturn valueIsChanged EndGetSet(ByVal value AsBoolean) valueIsChanged = value EndSetEndPropertyPublicReadOnlyProperty EditingControlCursor() As Cursor _ Implements IDataGridViewEditingControl.EditingPanelCursor GetReturnMyBase.Cursor EndGetEndPropertyProtectedOverridesSub OnValueChanged(ByVal eventargs As EventArgs) ' Notify the DataGridView that the contents of the cell have changed. valueIsChanged = TrueMe.EditingControlDataGridView.NotifyCurrentCellDirty(True) MyBase.OnValueChanged(eventargs) EndSubEndClassPublicClass Form1 Inherits Form Private dataGridView1 AsNew DataGridView() <STAThreadAttribute()> _ PublicSharedSub Main() Application.Run(New Form1()) EndSubPublicSubNew() Me.dataGridView1.Dock = DockStyle.Fill Me.Controls.Add(Me.dataGridView1) Me.Text = "DataGridView calendar column demo"EndSubPrivateSub Form1_Load(ByVal sender AsObject, ByVal e As EventArgs) _ HandlesMe.Load Dim col AsNew CalendarColumn() Me.dataGridView1.Columns.Add(col) Me.dataGridView1.RowCount = 5 Dim row As DataGridViewRow ForEach row InMe.dataGridView1.Rows row.Cells(0).Value = DateTime.Now Next row EndSubEndClass




推荐答案

嗨Vino Nagu,

Hi Vino Nagu,

感谢您在此发帖。

此论坛与MSBuild有关,因为您的问题与有关。
Windows窗体
,我们帮助您将其移至正确的论坛以获得更好的支持。

This forum is about the MSBuild, as your issue is more related to the Windows Forms, we help you move it to correct forum for better support.

如果您有一些MSBuild问题,请随时与我们联系。我们将尽力为您提供解决方案。

If you have some MSBuild questions, please feel free to contact us. We will try our best to give you a solution.

感谢您的理解与合作。


这篇关于如何:Windows窗体DataGridView单元中的主机控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆