2014-07-25 160 views
0

如何將數據庫查詢結果填充到列表視圖。我遇到了「Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0)」這一行的問題。VB.net將數據庫查詢結果填充到列表視圖

Dim cn As New SqlConnection() 
    Dim WFTeam As New DataSet() 
    Dim da As SqlDataAdapter 
    Dim cmdBuilder As SqlCommandBuilder 
    Dim myRow As DataRow 
    Dim dt As New DataTable 
    Dim strSqlStm As String = "" 
    Dim strConnectionString As String = "" 


     strSqlStm = "SELECT [SRF#], [FirstName], [LastName] FROM [Agent] WHERE [TeamLeaderNo] = 103" 
     cn.ConnectionString = strDataSource & "Initial Catalog=EmployeeDatabase;" & strUID & strPassword 
     cn.Open() 
     da = New SqlDataAdapter(strSqlStm, cn) 
     cmdBuilder = New SqlCommandBuilder(da) 
     da.Fill(WFTeam, "Team") 
     WFTeam.Tables.Add(dt) 
     da.Fill(dt) 

     Form1.ListView1.Items.Clear() 

     Dim i As Integer = 1 
     For Each myRow In dt.Rows 
      If Not IsDBNull(myRow.Item(0)) Then 

       Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0) 
      End If 
      If Not IsDBNull(myRow.Item(1)) Then 
       Form1.ListView1.Items(i).SubItems(2).Text = myRow.Item(1) 
      End If 
      If Not IsDBNull(myRow.Item(2)) Then 
       Form1.ListView1.Items(i).SubItems(3).Text = myRow.Item(2) 
      End If 
      i = i + 1 
     Next 

     cn.Close() 

下面的代碼工作,但我需要訪問特定項目就像Excel中

For Each myRow In dt.Rows 

    If Not IsDBNull(myRow.Item(0)) Then 
     Form1.ListView1.Items.Add(myRow.Item(0)) 
     'Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0) 
    End If 
    If Not IsDBNull(myRow.Item(1)) Then 
     Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems.Add(myRow.Item(1)) 
     'Form1.ListView1.Items(i).SubItems(2).Text = myRow.Item(1) 
    End If 
    If Not IsDBNull(myRow.Item(2)) Then 
     Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems.Add(myRow.Item(2)) 
     'Form1.ListView1.Items(i).SubItems(3).Text = myRow.Item(2) 
    End If 
    i = i + 1 
    Next 
+1

馬上我可以看到你正試圖添加到一個不存在的項目。您清除了「ListView1.Items」,然後立即嘗試設置「Items(1).SubItems(1)'的值。你首先需要做一個'ListView1.Items.Add()'。 「有問題」的 – helrich

+1

不是很具描述性。我可以看到你清除項目;這意味着您需要使用LV的新數據創建新項目。清除後沒有項目或子項目 – Plutonix

+0

當第一個項目是DbNull時,新代碼將不起作用 - 當沒有項目時,不能添加子項目。當'myRow.Item(1)'爲DbNull時,它還會將'myRow.Item(2)'放在第一列中。 – Plutonix

回答

0

您清除了LV,所以沒有項目或子項目來填充。您需要創建新的ListViewItem並使用DB數據填充它們。但是,如果第一個字段IsDbNull意味着您無法爲該記錄添加任何內容,則編輯會跳過添加項目。下面還將「錨」的數據,這樣當任何分項數據IsDBNull以便在,下一個子項不轉向了一個:

Form1.ListView1.Items.Clear() 

Dim lvi As ListViewItem 
For Each myRow In dt.Rows 

    ' create NEW listview item for this row 
    lvi = New ListViewItem 
    If IsDBNull(myRow.Item(0)) Then 
     lvi.Text = " "   ' blank Item 
    Else   
     lvi.Text = myRow.Item(0) 
    End If 

    ' repeat for the sub items, adding blanks when DbNull 

    If IsDBNull(myRow.Item(1)) Then 
     lvi.SubItems.Add(" ") 
    Else 
     lvi.SubItems.Add(myRow.Item(1)) 
    End If 

    ' etc 

    Form1.ListView1.Items.Add(lvi) 

Next 

一個DataGridView會更適合這個比ListView,特別是訪問類似的項目Excel中。我認爲這意味着你希望myRow.Item(2)始終是第二個子項目。因此,上面的代碼將空項目或子項目添加爲「佔位符」。

相關問題