2016-09-28 44 views
1

我有一个DataGridView,我从多个excel文件导入数据。但是每次我输入数据都会覆盖以前的数据。我如何获得它将下一个Excel文件添加到数据网格视图中的前一个末尾?将多个数据源添加到datagridview vb.net

If DataGridView1.RowCount > 0 Then 
    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) 

    Dim tab As DataTable = DtSet.Tables(0) 
    DataGridView1.DataSource = tab 

    MyConnection.Close() 
Else 

    'The below connection allows for the opening of .xls files and .xlsx. The one reamed out below doesnt open up .xls files. 
    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() 
End If 
+0

你不能拥有DGV的多个数据源 - 它是单数的。是我还是If和Else块都做同样的事情,除了一个有额外的DataTable变量 – Plutonix

+2

不是没有,但你问了16个问题,并得到18个答案;只接受一个并且只投了一次。接受你认为有用的答案和提升帖子有助于他人找到很好的答案。 [Tour]解释它。如果源相同,则可以附加到数据表。 – Plutonix

回答

2

你可以简单地填单DataTable多次和行会被添加到DataTable这种方式。例如:

Try 
    Dim table = New DataTable() 
    Dim connection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
     "Data Source=D:\excel1.xlsx;" & _ 
     "Extended Properties=Excel 12.0;" 
    Using adapter As New OleDbDataAdapter("select * from [Sheet1$]", connection) 
     adapter.Fill(table) 
    End Using 
    connection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
     "Data Source=D:\excel2.xlsx;" & _ 
     "Extended Properties=Excel 12.0;" 
    Using adapter As New OleDbDataAdapter("select * from [Sheet1$]", connection) 
     adapter.Fill(table) 
    End Using 
    Me.DataGridView1.DataSource = table 
Catch ex As Exception 
    MessageBox.Show(ex.ToString()) 
End Try 

在不同的Excel文件中的列数可以是不同的,但是如果有具有相同名称的列,这些列的数据应该是相同类型的。

+1

我希望SQL能够拼出所需的列,以确保'foo'将最终与foo列中的其他foos – Plutonix

+0

@Reza Ahaei尽管您的答案导入了数据,但它并不堆叠新的记录在旧记录的末尾。例如,我的第一次导入是100条记录,而我的第二条导入是200条,那么我的数据表中应该有300条记录。 – Chrisetiquette

+0

@Chrisetiquette你将有300条记录。 –

相关问题