首页 > 解决方案 > 当用户按 ENTER 时,在 datagridview 的单元格中创建一个新行

问题描述

在 vb.net 中创建的项目中,我有一个 datagridview,用户可以在其中直接输入数据。列是数量、描述、价格和总计。数量和价格列只接受数字和逗号,计算总列。我希望当用户编辑描述单元格时,如果按 ENTER 创建一个新行(crlf)。由于我在互联网上没有找到任何有用的例子,你能帮我吗?

标签: vb.netdatagridviewcellenter

解决方案


我看过你说的那个帖子。转换我得到的代码形式 c#

Public Class CustomDataGridViewTextBoxEditingControl
Inherits DataGridViewTextBoxEditingControl

Public Overrides Function EditingControlWantsInputKey(ByVal keyData As Keys, ByVal dataGridViewWantsInputKey As Boolean) As Boolean
    Select Case keyData And Keys.KeyCode
        Case Keys.Enter
            Return True
        Case Else
    End Select
    Return MyBase.EditingControlWantsInputKey(keyData, dataGridViewWantsInputKey)
End Function
Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
    Select Case e.KeyCode And Keys.KeyCode
        Case Keys.Enter
            Dim oldSelectionStart As Integer = Me.SelectionStart
            Dim currentText As String = Me.Text
            Me.Text = String.Format("{0}{1}{2}", currentText.Substring(0, Me.SelectionStart), Environment.NewLine, currentText.Substring(Me.SelectionStart + Me.SelectionLength))
            Me.SelectionStart = oldSelectionStart + Environment.NewLine.Length
        Case Else
    End Select

    MyBase.OnKeyDown(e)
End Sub
End Class
Public Class CustomDataGridViewTextBoxCell
Inherits DataGridViewTextBoxCell
Public Overrides ReadOnly Property EditType As Type
    Get
        Return GetType(CustomDataGridViewTextBoxEditingControl)
    End Get
End Property
End Class

然后,在包含 datagridview(一个测试项目!)的表单中,我添加了

Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles 
MyBase.Load

    Dim col As DataGridViewColumn = Me.DataGridView2.Columns(2)
    col.CellTemplate = New CustomDataGridViewTextBoxCell

End Sub

但不工作。怎么了?


推荐阅读