2011-09-15 6 views
0

データグリッドビューに複数行のデータを表示しようとしています。vb.net 2010 datagridviewの問題 - データは最初の行のみを取り込みます

私はプログラムを呼び出すたびに、新しい行に追加するのではなく、データ行の1行目のみをデータグリッドビューに書き込みます。

私は数時間フォーラムを見てきましたが、私の経験不足と結びついて理解できません。

次のコードはループ内にあり、毎回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の読み方)を持つ順序は、あなたが望むものをやり遂げることを意味しません。

あなたの現在のコードのステップの私の読書は次のとおりです。

各xmlファイルの呼び出しの場合
  1. 読み取ったデータ
  2. 文字列変数にあなたのXMLを読み取るデータセット
  3. を作成するか、または少なくとも再初期化(しかし、あなたはそれで何もしない)
  4. ことのデータソースを上書き
  5. (rtb_Subsidary.AppendText(ファイル&のvbCrLf)が何をするかは明らかではない)データセットに単一の行を追加します。バックによるXMLの読み取りにのみ1行があり、新たに初期化されたDataTable(とDataGridViewのは

私のVB.Netはこちら)あなたに動作しませんいくつかのコード(またはいくつかのC#を与えるよりも、そうではなく非常に錆びていますあなたを正しい方法で見なければならない擬似コードです。

  1. 読み出しデータ方式では、あなたのテーブルを初期化しない - 他の場所でテーブルを作成しても、他の場所
  2. リードしたデータの一時テーブルへにおける読み出しデータの方法でDataGridViewのデータソースとして割り当てると、その後のDataTableを使用します。この新しいデータと古いデータを結合するためにマージします。

ので、擬似コードのような非常に貧しい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を持っているよう)素晴らしいことができ、それはあなたがすることができますアプリケーションの実行を1行ずつ順番に確認します。

0

私はそれを働かせました - 私は過度に複雑な方法を試みていました。

私は上記のコードから多くのコードが変更されたので本当に答えることはできませんが、返信に時間をとっていただきありがとうございます。

関連する問題