Повторная загрузка из Excel в DataGridView вызывает ошибку - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Данные загружаю из Excel в DataGridView2 все нормально. Далее необходимо загрузить в DataGridView2 новый файл из Excel. Предварительно чистим:
Листинг программы
  1. ' Чистим Excel
  2. Dim xlp() As Process = Process.GetProcessesByName("EXCEL")
  3. For Each Process As Process In xlp
  4. Process.Kill()
  5. If Process.GetProcessesByName("EXCEL").Count = 0 Then
  6. Exit For
  7. End If
  8. Next
  9. ' Чистим DataGridView2
  10. DataGridView2.DataSource = Nothing
  11. Dim command As OleDb.OleDbCommand ' = connection.CreateCommand()
  12. Dim da As New OleDb.OleDbDataAdapter(command)
  13. dtt.Clear() ' Чистим datatable
  14.  
  15. ' Загружаем в таблицу-DataGridView2 файл Excel
  16. LoadDataKey(My.Application.Info.DirectoryPath + "" + Label1.Text + ".xlsx", iShtName2)
При повторной загрузке не выходя из формы вызывает ошибку строка: da.Fill(dtt) в этом коде:
Листинг программы
  1. Private Sub LoadDataKey(ByVal iPath As String, ByVal iShtName2 As String)
  2. ' Взять данные из Excel
  3. Dim connectionString As String
  4. Dim connection As OleDb.OleDbConnection
  5. Try
  6. 'Для Excel 12.0
  7. connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + iPath + "; Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
  8. connection = New OleDb.OleDbConnection(connectionString)
  9. connection.Open()
  10. Catch ex12 As Exception
  11. MsgBox("Не знаю такой версии Excel")
  12. End Try
  13. 'Выборка данных
  14. Dim command As OleDb.OleDbCommand = connection.CreateCommand()
  15. command.CommandText = "Select * From [Лист1$]"
  16. Dim da As New OleDb.OleDbDataAdapter(command)
  17. da.Fill(dtt)

Решение задачи: «Повторная загрузка из Excel в DataGridView вызывает ошибку»

textual
Листинг программы
  1. Public Class Form1
  2.     Dim dtt As DataTable
  3.  
  4.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  5.         'Убрать тормоза таблицы
  6.         GetType(Control).InvokeMember("DoubleBuffered", _
  7.          System.Reflection.BindingFlags.SetProperty Or _
  8.          System.Reflection.BindingFlags.Instance Or _
  9.          System.Reflection.BindingFlags.NonPublic, _
  10.          Nothing, _
  11.          DataGridView1, _
  12.          New Object() {True})
  13.  
  14.         With Me.DataGridView1       '   Параметры таблицы во 2 закладке
  15.             .DataSource = Nothing
  16.             .DataSource = LoadDataKey("путь к файлу", "имя листа")
  17.             .AutoGenerateColumns = True
  18.             .BorderStyle = BorderStyle.Fixed3D
  19.             .EditMode = DataGridViewEditMode.EditOnEnter
  20.             .AllowUserToOrderColumns = True
  21.             .AllowUserToResizeColumns = True            '   Возможность перетаскивать столбец
  22.             .AllowUserToAddRows = False
  23.             .RowHeadersWidth = 55                       '  Ширина столбца заголовка, самый левый столбец
  24.             '   Меняем высоту строки заголовков
  25.             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  26.             .ColumnHeadersHeight = 40
  27.             .Columns(0).Width = 200                       '   Задаем ширину 1 столбца
  28.             .Columns(0).ReadOnly = True                  '   Делаем не редактируемым 1 столбец
  29.             .Columns(1).Width = 50
  30.             .Columns(2).Width = 80
  31.  
  32.             '   Выравнивание влево 1 столбца
  33.             .Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
  34.             '   Выравнивание по центру в столбце
  35.             .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  36.             .Refresh()
  37.         End With
  38.     End Sub
  39.  
  40.     Private Function LoadDataKey(ByVal iPath As String, ByVal iShtName2 As String) As DataTable
  41.         Using conn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & iPath & "; Extended Properties=""Excel 12.0 Xml; HDR=YES"";")
  42.             Try : conn.Open() : Catch : MsgBox("Не знаю такой версии Excel") : Return Nothing : End Try
  43.             Dim command As New OleDb.OleDbCommand("Select * From [" & iShtName2 & "$]", conn)
  44.             Dim da As New OleDb.OleDbDataAdapter(command)
  45.             dtt = New DataTable : da.Fill(dtt)
  46.             conn.Close()
  47.             Return dtt
  48.         End Using
  49.     End Function
  50. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут