我正在尝试通过 VB.NET 中的数据表将一个文本框拆分为多列 datagridview。
所以我通过文本框中的事件制作了带有 QR 条形码标签的 2D 条形码扫描仪。
我的代码有问题吗?请指导我
谢谢
Public Class Form2
Public testtable As New DataTable()
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
testtable.Columns.AddRange({
New DataColumn("No", GetType(Integer)),
New DataColumn("Criteria1", GetType(String)),
New DataColumn("Criteria2", GetType(String)),
New DataColumn("Criteria3", GetType(String)),
New DataColumn("Criteria4", GetType(String)),
New DataColumn("Criteria5", GetType(String))})
End Sub
Private Sub parseBarcodeScan(input As String)
Dim split = input.Split({","}, StringSplitOptions.RemoveEmptyEntries).Select(Function(s) s.Trim())
End Sub
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Chr(13) Then
parseBarcodeScan(TextBox1.Text)
Try
testtable.Rows.Add(testtable.Rows.Count + 1, Split(0), Split(1), Split(3), Split(6), Split(8))
DataGridView1.DataSource = testtable
TextBox1.Clear()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
End Class
文本框中的示例数据示例:
A、B、C、D、E、F、G、H、I
上面代码的结果:
不 | 标准1 | 标准2 | 标准3 | 标准4 | 标准5 |
---|---|---|---|---|---|
1 | 系统.String[] | 系统.String[] | 系统.String[] | 系统.String[] | 系统.String[] |
想要的结果
不 | 标准1 | 标准2 | 标准3 | 标准4 | 标准5 |
---|---|---|---|---|---|
1 | A | B | D | G | 我 |
split
中的parseBarcodeScan()
变量是方法的局部变量。当您稍后将 Split(0)
、Split(1)
、Split(2)
...等添加到网格行时,它会调用返回数组的方法,然后在数组上隐式调用 ToString()
以显示输出。这就是为什么你会看到 System.String[]
。
要修复此问题,请使用
Function
而不是 Sub
来表示 parseBarcodeScan()
并返回结果:
Private Function parseBarcodeScan(input As String) As List(Of String)
Return input.Split({","}, StringSplitOptions.RemoveEmptyEntries).Select(Function(s) s.Trim()).ToList()
End Sub
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Chr(13) Then
Dim items = parseBarcodeScan(TextBox1.Text)
Try
testtable.Rows.Add(testtable.Rows.Count + 1, items(0), items(1), items(3), items(6), items(8))
DataGridView1.DataSource = testtable
TextBox1.Clear()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub