2014-12-07 48 views
0

我需要設置DataGridView.EditingControl的文本值。我試過如何設置DataGridView的EditingControl的值

myDGV.EditingControl.Text() = "1/1/2001" 

myDGV.EditingControl.Text = "1/1/2001" 

myDGV.EditingControl.Text("1/1/2001") 

這會導致一個InvalidCastException(沒有檢查只能爲整數)。

該控件沒有Value()屬性,那麼如何設置該值?

(是的,我驗證過的細胞是在編輯模式下)

+0

爲什麼不爲底層業務對象設置值呢? – Neolisk 2014-12-07 13:10:21

回答

1

您需要處理EditingControlShowing事件。

Private Sub HandleDgvEditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles Dgv.EditingControlShowing 
    If (TypeOf e.Control Is DataGridViewTextBoxEditingControl) Then 
     With DirectCast(e.Control, DataGridViewTextBoxEditingControl) 
      .Text = "1/1/2001" 
     End With 
    End If 
End Sub 

請注意,此事件將針對所有可編輯單元格觸發。如果您只想操作給定列的編輯控件,則需要添加其他條件。事情是這樣的:

If (Me.Dgv.CurrentCell.OwningColumn is Me.DgvFooColumn) Then 

如果您需要從CellValidating事件還原修改然後存儲原始值顯示在編輯控件時。

Private Sub HandleDgvEditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles Dgv.EditingControlShowing 

    'Cache the edit control text 
    Me.cachedEditText = e.Control.Text 

End Sub 

Private Sub HandleDgvCellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles Dgv.CellValidating 

    'Ensure that the edit control exists 
    If (Not Me.Dgv.EditingControl Is Nothing) Then 

     'Validate the edit 
     If (Not valid) Then 
      Me.Dgv.EditingControl.Text = Me.cachedEditText 
     End If 

    End If 

End Sub 

Private cachedEditText As String 
+0

我不確定這會適用於我的情況。對不起,我沒有指定我在CellValidating事件中這樣做,所以如果可能,我需要「還原」那裏的值。 – marky 2014-12-08 13:42:09

+0

@marky請參閱我的編輯。您所要做的就是將編輯控制值存儲在「EditingControlShowing」事件中,並在需要還原時使用該值。 – 2014-12-08 14:36:08

+0

好的 - 有道理 - 想知道兩個事件都能看到的變量是否會成爲答案 - 我會給這個鏡頭併發布在這裏 - 儘管我認爲這會起作用。 – marky 2014-12-08 15:04:41