2014-07-09 62 views
1

我正在使用DatagridView工具。在这里,我正在对列进行手动输入并将其直接保存到数据库中。我有5个列,其中3个是字母数字,2个是数字列。如何使用VB.Net在datagridview的特定列中设置单元格格式?

我已经将条件设置为在EditingControlShowing事件中使用处理程序的数字列。

If grdLedgerDetails.CurrentCell.ColumnIndex = 4 Then 
     AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress 
    ElseIf grdLedgerDetails.CurrentCell.ColumnIndex = 5 Then 
     AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress 
    End If 


Private Sub TextBox_keyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) 
    If Char.IsDigit(CChar(CStr(e.KeyChar))) = False Then e.Handled = True 
End Sub 

此条件适用。但问题是,这种情况适用于所有列。我只是想让它在指定的列上工作。

请帮我解决这个问题。

在此先感谢。

回答

1

这工作得很好。

Private Sub grdLedgerDetails_EditingControlShowing(sender As Object, e As     System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles grdLedgerDetails.EditingControlShowing 
    Select grdLedgerDetails.CurrentCell.ColumnIndex 
     Case 2, 3 
      RemoveHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress 
     Case 4, 5 
      AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress 
    End Select 
End Sub 



Private Sub TextBox_keyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) 
    If Not Char.IsControl(e.KeyChar) And Not Char.IsDigit(e.KeyChar) And e.KeyChar <> "." Then 
     e.Handled = True 
    End If 
     End Sub 
+0

是的,它的工作很好 – Shell

0

尝试这样

Private Sub dgv_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) 
    RemoveHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress 
    AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress 
End Sub 

Private Sub TextBox_keyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) 
    Select Case grdLedgerDetails.CurrentCell.ColumnIndex 
     Case 4,5 
      If Char.IsDigit(CChar(CStr(e.KeyChar))) = False Then e.Handled = True 
    End Select 
End Sub 
+0

对不起,问题是..当我第一次输入字母数字列时,它工作正常。但是,一旦我在数字列中进行更改并尝试在字母数字列中进行编辑,它将采用数字列的格式并且不允许键入字符。有关这个问题的任何想法? – charu

+0

@charu你尝试过'e.ColumnIndex'而不是'CurrentCell.ColumnIndex'吗? – Shell

+0

但e.columnindex不会在控件事件中工作。 – charu

相关问题