2010-06-16 155 views
2

我有一個的DataGridView綁定到數據表具有定義爲整數 1個+ 16列。DataGridView的細胞編輯問題與十進制/十六進制格式

默認的單元格樣式是十六進制的2位數字(.Format="X2")。

當進入單元格編輯時,我想向用戶提供寫入十進制或十六進制值的可能性。

  1. 十六進制可以寫成像,例如,0×00,0X01,X02,XFF
  2. 小數像0,1,2,15

爲此,在EditingControlShowing我添加「 0X」到TextBox值

Private Sub BankGrid_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) 

    Dim grid As DataGridView = DirectCast(sender, DataGridView) 
    If Not TypeOf e.Control Is TextBox Then Return 

    Dim tb As TextBox = DirectCast(e.Control, TextBox) 
    tb.Text = "0x" & tb.Text 

    RemoveHandler tb.KeyPress, AddressOf TextBox_KeyPress 
    AddHandler tb.KeyPress, AddressOf TextBox_KeyPress 

End Sub 

而在TextBox_KeyPress子我執行所有輸入filteri以避免無效輸入。

我不明白的是我可以附加哪些事件來檢測編輯完成時。我想對面的EditingControlShowing,以便我可以刪除「0x」,但我沒有找到它。

回答

1

在TextBox和DataGRidView中嘗試所有可能的事件後,我終於找到一個對我的情況有用。

CellParsing

複製我的代碼,也許它可以幫助別人:)

Private Sub BankGrid_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs) 

     Dim grid As DataGridView = DirectCast(sender, DataGridView) 
     Dim cell As CustomCell = DirectCast(grid(e.ColumnIndex, e.RowIndex), CustomCell) 

     If e.Value Is Nothing OrElse String.IsNullOrEmpty(e.Value.ToString) Then 
      e.Value = cell.Value 
     Else 

      Dim iValue As Integer 
      If TryParseNumeric(e.Value.ToString, iValue) Then 

       If iValue >= 0 AndAlso iValue <= &HFF Then 
        e.Value = iValue 'value inside the range, accept it' 
       Else 
        e.Value = cell.Value 'value outside the range, reload old value' 
       End If 

      Else      
       e.Value = cell.Value 'invalid input, reload old value' 
      End If 

     End If 

     e.ParsingApplied = True 

    End Sub 
0

我會使用gridView actionevent CellValueChanged。如果這太晚,然後使用CellValueChanging

+0

CellValueChanged來得太晚了我的情況,這是seemes CellValueChanging不存在 – Drake 2010-06-17 12:48:58

+0

@ marco.ragogna對不起,我正在查看DevExpress版本的datagridview。我會經歷可以使用datagridview的可能的actionlisteners。例如有一個「CellBeginEdit」和一個「CellEndEdit」可能會有所幫助。 – Kyra 2010-06-17 14:01:05

+0

沒問題,我以前用DevExpress工作過,很不錯的產品:)我找到了一個解決方案,謝謝 – Drake 2010-06-17 14:23:32