首页 > 解决方案 > 通过 DataGridView 数据填充 TextBox

问题描述

DataGridView1 将填充 1 行或 2 行或 3 行 .. 最多 5 行 .. 当我单击 Button1 时我想要 4 列然后从 1 到 20 的 TextBox 将由 DataGridView1 TextBox 上显示的数据填充1 到 4 将由第一行填充 TextBoxes 从 5 到 8 将由第二行填充 TextBox 从 9 到 12 将由第三行填充 TextBox 从 13 到 16 将由第四行填充 TextBox 从 17到 20 将由第五行填充 例如..如果我在 DataGridView1 上只有 3 行,那么在这种情况下,从 13 到 20 的 TextBox 将为空。当 DataGridView1 的 5 行被填充时,我不会有任何问题,但是当我在 DataGridView1 上只有 4 或 3 或 2 或 1 行时,我会遇到问题并且它不起作用。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles       Button1.Click
If DataGridView1.Rows.Count = 0 Then
TextBox1.Text = DataGridView1.Rows.Item(0).Cells(0).Value.ToString()
TextBox2.Text = DataGridView1.Rows.Item(0).Cells(1).Value.ToString()
TextBox3.Text = DataGridView1.Rows.Item(0).Cells(2).Value.ToString()
        TextBox4.Text = DataGridView1.Rows.Item(0).Cells(3).Value.ToString()
    ElseIf DataGridView1.Rows.Count = 1 Then
        TextBox5.Text = DataGridView1.Rows.Item(1).Cells(0).Value.ToString()
        TextBox6.Text = DataGridView1.Rows.Item(1).Cells(1).Value.ToString()
        TextBox7.Text = DataGridView1.Rows.Item(1).Cells(2).Value.ToString()
        TextBox8.Text = DataGridView1.Rows.Item(1).Cells(3).Value.ToString()
    ElseIf DataGridView1.Rows.Count = 2 Then
        TextBox9.Text = DataGridView1.Rows.Item(2).Cells(0).Value.ToString()
        TextBox10.Text = DataGridView1.Rows.Item(2).Cells(1).Value.ToString()
        TextBox11.Text = DataGridView1.Rows.Item(2).Cells(2).Value.ToString()
        TextBox12.Text = DataGridView1.Rows.Item(2).Cells(3).Value.ToString()
    ElseIf DataGridView1.Rows.Count = 3 Then
        TextBox13.Text = DataGridView1.Rows.Item(3).Cells(0).Value.ToString()
        TextBox14.Text = DataGridView1.Rows.Item(3).Cells(1).Value.ToString()
        TextBox15.Text = DataGridView1.Rows.Item(3).Cells(2).Value.ToString()
        TextBox16.Text = DataGridView1.Rows.Item(3).Cells(3).Value.ToString()
    ElseIf DataGridView1.Rows.Count = 4 Then
        TextBox17.Text = DataGridView1.Rows.Item(4).Cells(0).Value.ToString()
        TextBox18.Text = DataGridView1.Rows.Item(4).Cells(1).Value.ToString()
        TextBox19.Text = DataGridView1.Rows.Item(4).Cells(2).Value.ToString()
 TextBox20.Text =DataGridView1.Rows.Item(4).Cells(3).Value.ToString()
End If
End Sub

标签: vb.netwinforms

解决方案


我会这样写代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If DataGridView1.Rows.Count > 4 Then
        TextBox17.Text = DataGridView1.Rows.Item(4).Cells(0).Value.ToString()
        TextBox18.Text = DataGridView1.Rows.Item(4).Cells(1).Value.ToString()
        TextBox19.Text = DataGridView1.Rows.Item(4).Cells(2).Value.ToString()
        TextBox20.Text = DataGridView1.Rows.Item(4).Cells(3).Value.ToString()
    End If
    If DataGridView1.Rows.Count > 3 Then
        TextBox13.Text = DataGridView1.Rows.Item(3).Cells(0).Value.ToString()
        TextBox14.Text = DataGridView1.Rows.Item(3).Cells(1).Value.ToString()
        TextBox15.Text = DataGridView1.Rows.Item(3).Cells(2).Value.ToString()
        TextBox16.Text = DataGridView1.Rows.Item(3).Cells(3).Value.ToString()
    End If
    If DataGridView1.Rows.Count > 2 Then
        TextBox9.Text = DataGridView1.Rows.Item(2).Cells(0).Value.ToString()
        TextBox10.Text = DataGridView1.Rows.Item(2).Cells(1).Value.ToString()
        TextBox11.Text = DataGridView1.Rows.Item(2).Cells(2).Value.ToString()
        TextBox12.Text = DataGridView1.Rows.Item(2).Cells(3).Value.ToString()
    End If
    If DataGridView1.Rows.Count > 1 Then
        TextBox5.Text = DataGridView1.Rows.Item(1).Cells(0).Value.ToString()
        TextBox6.Text = DataGridView1.Rows.Item(1).Cells(1).Value.ToString()
        TextBox7.Text = DataGridView1.Rows.Item(1).Cells(2).Value.ToString()
        TextBox8.Text = DataGridView1.Rows.Item(1).Cells(3).Value.ToString()
    End If
    If DataGridView1.Rows.Count > 0 Then
        TextBox1.Text = DataGridView1.Rows.Item(0).Cells(0).Value.ToString()
        TextBox2.Text = DataGridView1.Rows.Item(0).Cells(1).Value.ToString()
        TextBox3.Text = DataGridView1.Rows.Item(0).Cells(2).Value.ToString()
        TextBox4.Text = DataGridView1.Rows.Item(0).Cells(3).Value.ToString()
    End If
End Sub


Public Class TestItem
    Public Property Prop1 As String
    Public Property Prop2 As String
    Public Property Prop3 As String
    Public Property Prop4 As String

    Public Sub New(P1 As String, P2 As String, P3 As String, P4 As String)
        Prop1 = P1
        Prop2 = P2
        Prop3 = P3
        Prop4 = P4
    End Sub
End Class

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim source As New List(Of TestItem)
    source.Add(New TestItem("a", "b", "c", "d"))
    source.Add(New TestItem("e", "f", "g", "h"))
    source.Add(New TestItem("i", "j", "k", "l"))
    source.Add(New TestItem("m", "n", "o", "p"))
    'source.Add(New TestItem("q", "r", "s", "t"))

    DataGridView1.DataSource = source
End Sub

不要将Count属性与Rows' collectionIndex混淆,它是从 0 开始的。在您的代码中,您正在检查 ifDataGridView1.Rows.Count = 0然后访问DataGridView1.Rows.Item(0). 如果Rows.Count为 0 Rows.Items(0),则不存在,因为它将是第一行,但由于行数为 0,因此网格中没有行。


推荐阅读