2015-06-01 80 views
0

我在vb.NET Visual Studio 2010中編寫應用程序。我有一個數據表存儲在4列(「索引」,「描述」,「值1」,「值2」 )。
我將「description」列添加到listbox1中,並且我希望在選擇ListBox1的文本後,在其自己的文本框中顯示來自列「value1」和「value2」的其他數據。
例如:如果我從ListBox1中選擇「a」,我想爲此項賦值value1 = 5和value2 = 300,並且此值應出現在TextBox1和TextBox2中,當我選擇「b」值7和400應該出現在這些文本框中。但我不知道該怎麼做,所以我在尋求幫助。這是我的代碼:如何從數據表的不同列中的數據分配到文本框

Public Class Form1 
    Dim dt2 As DataTable = New DataTable 
    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
    system.EventArgs) Handles MyBase.Load 
      Dim i As Integer 
    dt2.Columns.Add("index ", GetType(Integer)) 
    dt2.Columns.Add("description", GetType(String)) 
    dt2.Columns.Add("value1", GetType(Double)) 
    dt2.Columns.Add("value2", GetType(Double)) 

    dt2.Rows.Add(New Object() {1, "a", 5, 300}) 
    dt2.Rows.Add(New Object() {2, "b", 7, 400}) 
    dt2.Rows.Add(New Object() {3, "c", 8, 500}) 
    dt2.Rows.Add(New Object() {4, "d", 9, 600}) 

    If ListBox1.Text = "" Then 
     For i = 0 To 3 
      ListBox1.Items.Add(dt2.Rows(i).Item("description")) 
      AddHandler ListBox1.SelectedIndexChanged, AddressOf ListBox1_SelectedIndexChanged 
      TextBox2.Text = dt2.Rows(i).Item("value1") 
     Next 
    End If 
End Sub 
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ListBox1.SelectedIndexChanged 
    For i = 0 To 3 
     TextBox2.Text = dt2.Rows.Item(i)("value1") 
    Next 
End Sub 

末級

回答

0

試試這個。

  1. 考慮基於數據表中的行數清除列表框的項目,而不是做If ListBox1.Text = ""
  2. 不循環0〜3次,循環。
  3. 不要在循環中添加事件處理程序,只需執行一次。
  4. 不要在SelectedIndexChanged中循環,您將最終得到文本框中最後一個循環的值。使用列表框的選定索引來獲取所需的行。
  5. 考慮使用數據綁定項添加到列表框(以下未證實)

    Public Class Form1 
    
        Dim dt2 As DataTable = New DataTable 
    
        Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As system.EventArgs) Handles MyBase.Load 
    
         AddHandler ListBox1.SelectedIndexChanged, AddressOf ListBox1_SelectedIndexChanged 
    
         Dim i As Integer 
    
         dt2.Columns.Add("index ", GetType(Integer)) 
         dt2.Columns.Add("description", GetType(String)) 
         dt2.Columns.Add("value1", GetType(Double)) 
         dt2.Columns.Add("value2", GetType(Double)) 
    
         dt2.Rows.Add(New Object() {1, "a", 5, 300}) 
         dt2.Rows.Add(New Object() {2, "b", 7, 400}) 
         dt2.Rows.Add(New Object() {3, "c", 8, 500}) 
         dt2.Rows.Add(New Object() {4, "d", 9, 600}) 
    
         ListBox1.Items.Clear() 
    
         For i = 0 To dt2.Rows.Count - 1 
          ListBox1.Items.Add(dt2.Rows(i).Item("description")) 
         Next 
    
        End Sub 
    
        Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ListBox1.SelectedIndexChanged 
         TextBox1.Text = dt2.Rows.Item(ListBox1.SelectedIndex)("value1") 
         TextBox2.Text = dt2.Rows.Item(ListBox1.SelectedIndex)("value2") 
        End Sub 
    
    End Class 
    
+0

感謝您的來代替。它現在工作:) – Suszi84

相關問題