如何使用vb.net将数据从无限量的数据文件导入DataGridView?

我需要将数据导入到DataGridView但是我需要在最后一次导入后堆叠数据。 所以,如果我的第一个文件是100条logging,而我的第二个文件是200条logging,我现在应该有300条logging。 我需要能够按导入button浏览到一个文件并导入它,它会添加到数据集的末尾。 文件和logging的数量会有很大的不同。 这里是我的代码到目前为止,但现在它只是覆盖DataGridView的数据每次我导入新的数据。 excel文件只是一个testing文件,最终生病添加一个文件夹浏览器对话框,我将select“x”数量的文件。

 MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Work\4pc_test1.xlsx;Extended Properties=Excel 12.0;") 'MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & fd.FileName & "';Extended Properties=Excel 8.0;") MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection) MyCommand.TableMappings.Add("Table", "Net-informations.com") DtSet = New System.Data.DataSet MyCommand.Fill(DtSet) DataGridView1.DataSource = DtSet.Tables(0) MyConnection.Close() 

如果你想追加数据,你不应该每次都创build一个新的DataSetDatatable (实际上你根本不需要一个DataSet )。 创build并使用同一个来保存数据。

表单/类级别variables:

 Private dtXLS As DataTable ' once connection string to rule them all Private AceXLSConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties=Excel 12.0;" 

然后一个控制循环:

 Private Sub btnLoad_Click(etc etc ' create table ONCE dtXLS = New DataTable ' files to laod: Dim files As String() = {"C:\Temp\Sample1.xls", "C:\Temp\Sample2.xls"} For Each fname In files AppendXLS(fname) Next dgv1.DataSource = dtXLS End Sub Private Sub AppendXLS(filname As String) ' create conn str for this file Dim connx = String.Format(AceXLSConnStr, filname) ' always dispose of connections and commands Using dbCon As New OleDbConnection(connx) Using cmd As New OleDbCommand("select * from [Sheet1$]", dbCon) dbCon.Open() dtXLS.Load(cmd.ExecuteReader()) End Using End Using End Sub 

在窗体级别声明( Private ),连接string掩码和DataTable都可用于这两种方法。 第一个创buildDataTable实例(仅一次),并在另一个实例中连续添加数据。

另外,特别是如果要加载“无限”数量的文件,则需要确保closures并处理DBCommand和连接。 Using块声明并创build一个对象以供使用,然后在最后处置它。

结果(文件1有项目1-5,文件2有项目10-15): 在这里输入图像说明


由于您对Scope的概念至less有点困惑,简而言之:

  • Dim/Private | Friend | Public Dim/Private | Friend | Public 申报一个variables,即所有。
  • New创build一个实例。 Dim and New并不总是必须一起去。 事实上,当你发现自己把Dim foo As New...键入Dim foo As New...停下来,想想这是不是你真正想要的,因为….
  • 声明variables的地方确定了它的Scope – 它可以从哪里访问。 在方法中声明的variables只存在于那里。

还有其他等级的范围如块级。 请参阅参考variables和表单中其他位置的对象,了解更多细节。