【问题标题】:Fill TextBox by DataGridView data通过 DataGridView 数据填充 TextBox
【发布时间】:2019-03-20 17:16:43
【问题描述】:

DataGridView1 将填充 1 行或 2 行或 3 行 .. 最多 5 行 .. 我有 4 列 我希望当我单击 Button1 时,从 1 到 20 的 TextBox 将被 DataGridView1 上显示的数据填充 从 1 到 4 的 TextBox 将被第一行填充 从 5 到 8 的文本框将由第二行填充 9到12的TextBox将被第三行填充 13到16的TextBox将被第四行填充 17到20的TextBox将被第五行填充 例如..如果我在 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

【问题讨论】:

  • 如果您只有三行,那么您将需要一个 IF-Then 块来为这些额外的文本框执行其他操作。
  • 有时我的 DataGridView1 中有 1 行,所以我会将 TextBox 从 1 填充到 4。有时我的 DataGridView1 中有 2 行,所以我会将 TextBox 从 1 填充到 8。有时我我的 DataGridView1 中会有 3 行,所以我将 TextBox 从 1 填充到 12。有时我的 DataGridView1 中有 4 行,所以我将 TextBox 从 1 填充到 16。有时我的 DataGridView1 中有 5 行,所以我会将 TextBox 从 1 填充到 20。当我单击 Button1
  • 嗯,好的。使用 IF-Then 块查看您有多少行。很难在这里找出问题所在。
  • 当我在 DataGridView1 中只有 4 或 3 或 2 或 1 行并且我单击 Button1 时,我会出现此错误(对象引用未设置为对象的实例。)
  • 这就是你做一个 If 条件的原因。使用 TextBox17-20 查看您的最后一个块:将 If DataGridView1.Rows.Count > 4 Then 放在它的顶部。在它后面加上一个 Else 并将四个文本框设置为一个空字符串。

标签: vb.net winforms


【解决方案1】:

我会这样写代码:

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' 集合Index 混淆,它是从0 开始的。在您的代码中,您正在检查DataGridView1.Rows.Count = 0,然后访问DataGridView1.Rows.Item(0)。如果 Rows.Count 为 0,则 Rows.Items(0) 不存在,因为它将是第一行,但由于行数为 0,因此网格中没有行。

【讨论】:

  • 谢谢 A.Buonanni。但它只有在 DataGridView1 完全被 5 行填充时才有效。我尝试了 4 行我有这个错误(对象引用未设置为对象的实例)跨度>
  • 我已经测试了代码,没有错误。你是如何填充 DataGridView 的?我编辑了我的代码,提供了 DataGridView1 的示例初始化。
  • 非常感谢 A.Buonanni 的帮助。现在它可以完美运行了。Cordially.SABRINE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多