Excel в DataGridView с OleDbConnection с использованием двух DataAdapter - PullRequest
0 голосов
/ 20 апреля 2019

1 - Создать C: \ Book1.xlsx файл на C диске.

2- Убедитесь, что у вас есть один лист в файле C: \ Book1.xlsx с именем Sheet1 .

3- Заполните Sheet1 ячейки от A1 ячейки до E20 ячейки некоторыми данными.

4- Закрыть C: \ Book1.xlsx файл.

5 - Поместите один DataGridView в Form1 и назовите его DataGridView1 .

6- Запустите код, чтобы проверить, можете ли вы получить данные Excel в DataGridView правильно.

Как видите, я использовал два OleDbDataAdapters , чтобы получить данные Excel в DataGridView .

Я предпочитаю использовать два OleDbDataAdapters , потому что я сталкиваюсь с из-за исключения памяти , если данные Excel настолько велики.

Если вы изучите мой код, то увидите, что myDataAdapter1 получает данные Excel из ячейки A1 в ячейку E10 . и myDataAdapter2 для получения данных Excel из ячейки A11 в ячейку E20 .

Если вы изучите мой код, вы увидите, что я попытался объединить две DataTables и связать их с DataGridView1.DataSource безуспешно.

Пожалуйста, исправьте мои коды и покажите, как объединить две таблицы данных и привязать к DataGridView1.DataSource ?

Я хочу получить данные Excel из ячейки A1 в ячейку E20 и поместить DataGridView1, используя два адаптера данных и две таблицы данных.

Если я использую один адаптер данных, мое приложение вылетает с большими данными.

Поэтому я пытаюсь использовать два адаптера данных и две таблицы данных.

Ответы [ 3 ]

1 голос
/ 21 апреля 2019

Сетка должна сначала добавить столбцы для размещения данных.Затем добавьте строки в цикл While.У меня только 3 столбца в тестовых данных из Excel.

Private Sub PrepareGrid()
    DataGridView1.Columns.Add("col1", "Column 1")
    DataGridView1.Columns.Add("col2", "Column 2")
    DataGridView1.Columns.Add("col3", "Column 3")
End Sub

Private Sub FillFromExcel()
    Dim FileName As String = "Book1.xlsx" '"C:\Book1.xlsx"
    Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FileName & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";")
        Using cmd As New OleDbCommand("SELECT * FROM [Sheet1$];", cn)
            cn.Open()
            Using reader = cmd.ExecuteReader
                While reader.Read
                    DataGridView1.Rows.Add(reader(0), reader(1), reader(2))
                End While
            End Using
        End Using
    End Using
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    PrepareGrid()
    FillFromExcel()
End Sub
0 голосов
/ 11 июня 2019

Вы можете перейти из файла Excel в DGV, как это.

Imports System.Data.SqlClient
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim MyConnection As System.Data.OleDb.OleDbConnection
        Dim DtSet As System.Data.DataSet
        Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
        MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\vb.net-informations.xls';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 Sub
End Class
0 голосов
/ 20 апреля 2019

DataTable.Merge не может работать без первичного ключа.Я дурачился с DataTable.Load(IDataReader), но для этого нужно использовать Merge внизу.Таким образом, вы можете либо добавить первичный ключ на лист Excel (просто сортировать столбец с номером строки) и установить соответствующие свойства в коде, либо вручную перебрать второй DataTable, добавив записи в таблицу.(медленно)

Вот немного другой метод заполнения сетки всеми данными.У меня нет большого листа Excel для тестирования.Это может решить проблемы с памятью, но я боюсь, что он будет использовать те же методы внизу.

Private Sub FillFromExcel()
    Dim FileName As String = "Book1.xlsx" '"C:\Book1.xlsx"
    Dim dt As New DataTable
    Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FILENAME & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";")
        Using cmd As New OleDbCommand("SELECT * FROM [Sheet1$];", cn)
            cn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub
...