2011-09-15 83 views
0

我想讓我的datagridview顯示多行數據。vb.net 2010 datagridview問題 - 數據只填充第一行

每次我調用程序時,它只會在datagridview中寫入第一行數據,而不是將其添加到新行。

我一直在論壇上看幾個小時,但結合我的經驗不足,我無法理解它。

下面的代碼是在一個循環中,它每次讀取一個xml文件。目標是將來自每個文件的xml數據放入表中的新行。

Public Sub ReadData(ByVal filename As String, ByVal file As String) 
Try 

DS.ReadXml(filename) 

DS.Tables.Add("MyTable") 
     With DS.Tables("MyTable") 
      .Columns.Add("Title 1") 
      .Columns.Add("Title 2") 
      .Columns.Add("Title 3") 
      .Columns.Add("Title 4") 
      .Columns.Add("Title 5") 
      .Columns.Add("Title 6") 
     End With 

     Using reader = New StreamReader(filename) 
      Dim line As String = reader.ReadToEnd() 
      rtb_Subsidary.AppendText(file & vbCrLf) 
      DS.Tables("MyTable").Rows.Add(file, "test 1", "test 2", "test 3", "test 4", "test 5", "test 6") 
     End Using 

     With dgv_Lic 
      .DataSource = DS.Tables("MyTable") 
      .ReadOnly = True 
      .ScrollBars = ScrollBars.Vertical 
      .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 
      .AutoResizeColumns() 
      .RowHeadersVisible = False 
      For Each col As DataGridViewColumn In .Columns 
       col.SortMode = DataGridViewColumnSortMode.NotSortable 
      Next 
     End With 



...end code 

回答

1

它看起來像你的XML閱讀的邏輯流程是不完全正確的。此外,讀取的XML看起來不正確。你正在做的其餘部分看起來不錯,但是你的語句(和XML讀取)的順序意味着它們最終不會完成你想要的。

我的你當前的代碼的步驟閱讀是:

  1. 每個XML文件調用讀取數據
  2. 創建或者至少重新初始化數據集
  3. 讀你的XML轉換爲字符串變量(但你沒有做任何事情)
  4. 添加一行到數據集(目前尚不清楚什麼rtb_Subsidary.AppendText(文件& vbCrLf)一樣)
  5. 覆蓋的數據源與新初始化的數據表(這是由於回XML閱讀只有一個行的DataGridView

我VB.Net是很生疏如此,而不是給你一些代碼,將無法正常工作(或C#)在這裏是一段應該以正確的方式看到你的僞代碼。

  1. 不要初始化表中讀取數據的方法 - 在別處創建表,併到一個臨時表並將其指定爲DataGridView的數據源別處
  2. 在讀取數據的READDATA方法,然後使用數據表。合併將這些新數據與舊數據結合起來。

所以,在VB很差像僞代碼:

Public Class Form1 

    // A private class level variable of type datatable 
    Private dt As New DataTable  

    // You forms constructor  
    Public Sub New() 

     InitializeComponent() 

     // You may be able to get away with this initialization by using it automatically from the xml only once 
     With td 
      .Columns.Add("Title 1")   
      .Columns.Add("Title 2")   
      .Columns.Add("Title 3")   
      .Columns.Add("Title 4")   
      .Columns.Add("Title 5")   
      .Columns.Add("Title 6")   
     End With 

     // Also have you DataGridView code here in the initialization section 
     With dgv_Lic   
      .DataSource = DS.Tables("MyTable")   
      .ReadOnly = True   
      .ScrollBars = ScrollBars.Vertical   
      .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill   
      .AutoResizeColumns()   
      .RowHeadersVisible = False   
      For Each col As DataGridViewColumn In .Columns   
       col.SortMode = DataGridViewColumnSortMode.NotSortable   
      Next   
     End With 

    End Sub 

    // And this is your ReadData method called for each file 
    Public Sub ReadData(ByVal filename As String) 
     // Local datatable 
     Dim dt_temp As New DataTable 

     Using reader = New StreamReader(filename)     
      dt_temp.ReadXml(reader) 
     End Using 

     // Now merge dt with 
     dt.Merge(dt_temp)   
    End Sub 
End Class 

順便說一句 - 對於這類問題的一個調試器(如你在Visual Studio中有),可以是偉大的,它可以讓你逐行執行您的應用程序,看看到底發生了什麼。

0

我得到它的工作 - 我試圖過度複雜的方式。

我真的不能發表一個答案,因爲代碼改變了很多,從我上面發佈的 - 但感謝您花時間回覆 - 它幫助了很大的時間。