2016-09-13 2 views
0

DataGridにDateTimePickerを追加するMSDNサイトのコードを使用しました。私はそれを少し短くしました、だから今DateTimepickerはそれを表示しませんそれはデフォルト値であり、ユーザーがそれから値を選択するときだけ列に入力します。 DTPを削除するためのコードをDeleteキーまたはBackspaceキーで追加します。私はDTPがnull値を持つことができない知っているが、私はそれを行うことができた。このような(DataGridViewの内部ではない)他のDTPの:DatagridのDateTimePicker - それは値ですか?

DataGrid内のDateTimePickerをホストするための
Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown 

     If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then 
      DTPtest.format = DTPtest.custom 
      DTPtest.Format = DateTimePickerFormat.Custom 
      DTPtest.CustomFormat = " " 
     End If 
    End Sub 

コードは、私の知識の上にある、と私は同じように動作する類似のものをどこに作成すべきか分かりません。何か助けてください! (前述のようにMSDNから)ここで

はDateTimePickerのをホストするための私のコードです:

Public Class CalendarColumn 
    Inherits DataGridViewColumn 

    Public Sub New() 
     MyBase.New(New CalendarCell()) 
    End Sub 

    Public Overrides Property CellTemplate() As DataGridViewCell 
     Get 
      Return MyBase.CellTemplate 
     End Get 
     Set(ByVal value As DataGridViewCell) 

      ' Ensure that the cell used for the template is a CalendarCell. 
      If (value IsNot Nothing) AndAlso 
       Not value.GetType().IsAssignableFrom(GetType(CalendarCell)) _ 
       Then 
       Throw New InvalidCastException("Must be a CalendarCell") 
      End If 
      MyBase.CellTemplate = value 

     End Set 
    End Property 

End Class 

Public Class CalendarCell 
    Inherits DataGridViewTextBoxCell 

    Public Sub New() 
     ' Use the short date format. 
     Me.Style.Format = "d" 
    End Sub 

    Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, 
     ByVal initialFormattedValue As Object, 
     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) 

    End Sub 

    Public Overrides ReadOnly Property EditType() As Type 
     Get 
      ' Return the type of the editing control that CalendarCell uses. 
      Return GetType(CalendarEditingControl) 
     End Get 
    End Property 

    Public Overrides ReadOnly Property ValueType() As Type 
     Get 
      ' Return the type of the value that CalendarCell contains. 
      Return GetType(DateTime) 

     End Get 

    End Property 

End Class 

Class CalendarEditingControl 
    Inherits DateTimePicker 
    Implements IDataGridViewEditingControl 

    Private dataGridViewControl As DataGridView 
    Private valueIsChanged As Boolean = False 
    Private rowIndexNum As Integer 

    Public Sub New() 
     Me.Format = DateTimePickerFormat.Short 
    End Sub 

    Public Property EditingControlFormattedValue() As Object _ 
     Implements IDataGridViewEditingControl.EditingControlFormattedValue 

     Get 
      Return Me.Value.ToShortDateString() 
     End Get 

     Set(ByVal value As Object) 
      Try 
       ' This will throw an exception of the string is 
       ' null, empty, or not in the format of a date. 
       Me.Value = DateTime.Parse(CStr(value)) 
      Catch 
       ' In the case of an exception, just use the default 
       ' value so we're not left with a null value. 
       Me.Value = DateTime.Now 
      End Try 
     End Set 

    End Property 

    Public Function GetEditingControlFormattedValue(ByVal context _ 
     As DataGridViewDataErrorContexts) As Object _ 
     Implements IDataGridViewEditingControl.GetEditingControlFormattedValue 

     Return Me.Value.ToShortDateString() 

    End Function 

    Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As _ 
     DataGridViewCellStyle) _ 
     Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl 

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

    End Sub 

    Public Property EditingControlRowIndex() As Integer _ 
     Implements IDataGridViewEditingControl.EditingControlRowIndex 

     Get 
      Return rowIndexNum 
     End Get 
     Set(ByVal value As Integer) 
      rowIndexNum = value 
     End Set 

    End Property 

    Public Function EditingControlWantsInputKey(ByVal key As Keys, 
     ByVal dataGridViewWantsInputKey As Boolean) As Boolean _ 
     Implements IDataGridViewEditingControl.EditingControlWantsInputKey 

     ' Let the DateTimePicker handle the keys listed. 
     Select Case key And Keys.KeyCode 
      Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, 
       Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp 

       Return True 

      Case Else 
       Return Not dataGridViewWantsInputKey 
     End Select 

    End Function 

    Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _ 
     Implements IDataGridViewEditingControl.PrepareEditingControlForEdit 

     ' No preparation needs to be done. 

    End Sub 

    Public ReadOnly Property RepositionEditingControlOnValueChange() _ 
     As Boolean Implements _ 
     IDataGridViewEditingControl.RepositionEditingControlOnValueChange 

     Get 
      Return False 
     End Get 

    End Property 

    Public Property EditingControlDataGridView() As DataGridView _ 
     Implements IDataGridViewEditingControl.EditingControlDataGridView 

     Get 
      Return dataGridViewControl 
     End Get 
     Set(ByVal value As DataGridView) 
      dataGridViewControl = value 
     End Set 

    End Property 

    Public Property EditingControlValueChanged() As Boolean _ 
     Implements IDataGridViewEditingControl.EditingControlValueChanged 

     Get 
      Return valueIsChanged 
     End Get 
     Set(ByVal value As Boolean) 
      valueIsChanged = value 
     End Set 

    End Property 

    Public ReadOnly Property EditingControlCursor() As Cursor _ 
     Implements IDataGridViewEditingControl.EditingPanelCursor 

     Get 
      Return MyBase.Cursor 
     End Get 

    End Property 

    Protected Overrides Sub OnValueChanged(ByVal eventargs As EventArgs) 

     ' Notify the DataGridView that the contents of the cell have changed. 
     valueIsChanged = True 
     Me.EditingControlDataGridView.NotifyCurrentCellDirty(True) 
     MyBase.OnValueChanged(eventargs) 

    End Sub 

End Class 

答えて

0

解決、非常にシンプル実際:それは同じではありません

Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown 

     If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then 
      DataGridView1.CurrentCell.Value = Nothing 
     End If 

    End Sub 

だけの事はあなたが行かなければならないということですセルから抜け出し、次に削除のためにItに戻ります。

関連する問題