【问题标题】:How to set cell formatting in particular column in datagridview using VB.Net?如何使用 VB.Net 在 datagridview 中的特定列中设置单元格格式?
【发布时间】:2014-07-09 08:13:48
【问题描述】:

我正在使用 DatagridView 工具。在这里,我正在对列进行手动输入并将其直接保存到数据库中。我有 5 列,其中 3 列是字母数字列,2 列是数字列。

我已使用 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

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

请帮我解决这个问题。

提前致谢。

【问题讨论】:

    标签: vb.net winforms c#-4.0 datagridview


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      这样试试

      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
      

      【讨论】:

      • 对不起,问题是..当我第一次输入字母数字列时,它工作正常。但是,一旦我在数字列中进行更改并尝试在字母数字列中进行编辑,它就会采用数字列的格式并且不允许键入字符。关于这个问题的任何想法?
      • @charu 你试过用e.ColumnIndex代替CurrentCell.ColumnIndex吗?
      • 抱歉@charu 迟到了。但是,你为什么要为纯数字单元格处理 keydown 事件。我的意思是当用户复制一些字母数字文本并在该单元格中输入时会发生什么。在这种情况下,应用程序将允许用户输入非数字值。所以,我的建议是使用javascript eventsRegularExpressionValidator 来处理数值。我已经更新了我的答案。
      • @shell.谢谢你的回复。在网络表单上会很好。但我正在处理 Windows 窗体。
      • 哎呀抱歉。谢谢。
      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多