vb.net 2010 datagridview问题 - 数据仅填充第一行

时间:2011-09-15 13:27:33

标签: vb.net datagridview

我正在尝试让我的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

2 个答案:

答案 0 :(得分:1)

看起来你的xml读数的逻辑流程并不完全正确。此外,读取xml看起来不正确。你正在做的其他事情看起来还不错,但是你的陈述(和xml阅读)的顺序意味着他们最终没有完成你想做的事情。

我阅读您当前代码的步骤是:

  1. 对于每个xml文件调用读取数据
  2. 创建或至少重新初始化数据集
  3. 将xml读入字符串变量(但不对其执行任何操作)
  4. 向数据集添加一行(不清楚rtb_Subsidary.AppendText(file& vbCrLf)的作用)
  5. 使用新初始化的DataTable覆盖DataGridView的数据源(由于后面的xml读取只有一行
  6. 我的VB.Net非常生疏,所以不是给你一些不起作用的代码(或者一些c#),这里是一段伪代码,应该以正确的方式看你。

    1. 不要在读数据方法中初始化表 - 在别处创建表并将其指定为其他地方的DataGridView数据源
    2. 将readdata方法中的数据读入临时表,然后使用DataTable.Merge将此新数据与旧数据合并。
    3. 所以,非常糟糕的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)

我得到了它 - 我正在尝试一种过于复杂的方式。

我真的无法发布答案,因为代码改变了我上面发布的内容 - 但是感谢您抽出时间回复 - 这有助于大量的时间。