2015-06-30 2 views
0

Я использую следующий код для чтения файла 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 
+0

Поскольку вы находитесь в VB, я предполагаю, что вы находитесь в Visual Studio. Попробуйте добавить точку останова в свой код. Это позволит вам остановить код на контрольной точке и посмотреть на значения. Это процесс отладки и может предоставить вам ошибку или дополнительную информацию. Вот ссылка http://www.c-sharpcorner.com/UploadFile/pranayamr/setting-breakpoints-in-visual-studio/ – JabberwockyDecompiler

+0

У меня есть одно предложение, которое сделает вашу программу блестящей. Используйте 'microsoft.ace.oledb.xxx' провайдер для подключения к вашему листу' excel', как если бы вы подключились к БД. Прочитайте данные в «списке (excelModel)», где модель excel - это не что иное, как класс POCO, который может хранить данные вашего листа. Затем привяжите свою сетку к этому списку, используя 'datasource, displaymember, valuememeber'. Вы будете в хорошей форме. Или вы можете загрузить «набор данных» и связать это. Загрузка в модель даст вам большую гибкость. И самое лучшее, вы можете отредактировать этот материал прямо в сетке и сохранить его обратно в excel. Вау –

ответ

0

Если проблема только запускается после первого запуска, мое предположение было бы, что очистка сетки является проблемой. Как предлагает JabberWocky, придерживайте точку останова перед линиями, очищающими сетку, и один после этого, чтобы вы могли понять, как долго этот шаг.

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

Смежные вопросы