Я использую следующий код для чтения файла Excel в datagridview (EquipmentDataGrid). В первый раз, когда он создает datagridview, он отлично работает, однако, если я вернусь к закладке (и, таким образом, запустив код), она зависнет и займет около 10 минут, чтобы пользовательский интерфейс стал отзывчивым. Я не могу понять, в чем проблема, поскольку он всегда отлично работает с первого раза. Я ОЧЕНЬ новичок в программировании (только началось около 1 недели назад из-за отсутствия опыта), так что извините, если это простое исправление.Приложение замораживается при создании datagridview
Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
If TabControl1.SelectedTab Is Equipment Then
Dim xlApp As Excel.Application
Dim xLBook As Excel.Workbook
Dim xLSheet As Excel.Worksheet
Dim x As Integer
EquipmentDataGrid.Rows.Clear()
EquipmentDataGrid.Columns.Clear()
xlApp = New Excel.Application
xLBook = xlApp.Workbooks.Open(My.Settings.SharefilePath + "Equipment Moves\EquipmentLog")
xLSheet = xLBook.Worksheets("Summary")
EquipmentDataGrid.ColumnCount = 5
EquipmentDataGrid.Columns(0).Name = "Date"
EquipmentDataGrid.Columns(1).Name = "Equipment Number"
EquipmentDataGrid.Columns(2).Name = "Description"
EquipmentDataGrid.Columns(3).Name = "Hours"
EquipmentDataGrid.Columns(4).Name = "Location"
For x = 1 To xLSheet.Range("F1").Value
EquipmentDataGrid.Rows.Add()
EquipmentDataGrid.Item(0, x - 1).Value = xLSheet.Cells(1 + x, 1).Text
EquipmentDataGrid.Item(1, x - 1).Value = xLSheet.Cells(1 + x, 2).value
EquipmentDataGrid.Item(2, x - 1).Value = xLSheet.Cells(1 + x, 5).value
EquipmentDataGrid.Item(3, x - 1).Value = xLSheet.Cells(1 + x, 3).value
EquipmentDataGrid.Item(4, x - 1).Value = xLSheet.Cells(1 + x, 4).value
Next
xLBook.Saved = True
xLBook.Close()
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xLBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xLSheet)
x = Nothing
xLBook = Nothing
xLSheet = Nothing
xlApp = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
End If
End Sub
Поскольку вы находитесь в VB, я предполагаю, что вы находитесь в Visual Studio. Попробуйте добавить точку останова в свой код. Это позволит вам остановить код на контрольной точке и посмотреть на значения. Это процесс отладки и может предоставить вам ошибку или дополнительную информацию. Вот ссылка http://www.c-sharpcorner.com/UploadFile/pranayamr/setting-breakpoints-in-visual-studio/ – JabberwockyDecompiler
У меня есть одно предложение, которое сделает вашу программу блестящей. Используйте 'microsoft.ace.oledb.xxx' провайдер для подключения к вашему листу' excel', как если бы вы подключились к БД. Прочитайте данные в «списке (excelModel)», где модель excel - это не что иное, как класс POCO, который может хранить данные вашего листа. Затем привяжите свою сетку к этому списку, используя 'datasource, displaymember, valuememeber'. Вы будете в хорошей форме. Или вы можете загрузить «набор данных» и связать это. Загрузка в модель даст вам большую гибкость. И самое лучшее, вы можете отредактировать этот материал прямо в сетке и сохранить его обратно в excel. Вау –