Shaheer Rizwan Ответов: 1

Проблема с загрузкой CSV-файла в datagridview


Приведенный ниже код я использовал для того, чтобы при нажатии на кнопку содержимое CSV-файла загружалось в DataGridView. Однако, когда я нажимаю кнопку, печатается только одна строка, а остальные не печатаются, даже если я нажму ее снова.

Я не уверен, в чем заключается проблема, некоторая помощь была бы признательна

Спасибо

Что я уже пробовал:

Private Sub btnLoadDGVGeneral_Click(sender As Object, e As EventArgs) Handles btnLoadDGVGeneral.Click
    dataGVGeneral.Rows.Clear()
    Try
        'New Variable: fname, represents File Path of CSV as String
        Dim fname As String = "E:\SAT\Work.io\Work.io\bin\Debug\ListofTasks.csv"
        Dim reader As New StreamReader(fname, Encoding.Default)
        Dim sline As String = ""
        Dim colsexpected As Integer = 7
        Dim r As Integer = 0

        sline = reader.ReadLine
        Do
            sline = reader.ReadLine
            If sline Is Nothing Then Exit Do
            Dim details() As String = sline.Split(",")
            dataGVGeneral.Rows.Add()
            For i As Integer = 0 To 7
                dataGVGeneral.Rows(r).Cells(i).Value = details(i)
            Next
            r = r + 1
        Loop
        reader.Close()
    Catch ex As Exception
    End Try
End Sub

0x01AA

Я предполагаю первое sline = reader.ReadLine перед циклом нужно пропустить информацию о заголовке столбца в csv-файле. Итак, вопрос: действительно ли в csv есть более 1 строки данных?

Shaheer Rizwan

да, на самом деле в CSV-файле есть еще 13 строк. Я понятия не имею, почему он не печатает остальное

0x01AA

Поэтому я предлагаю использовать отладчик и пройти через код.

0x01AA

Что произойдет, если вы прокомментируете материал "попробуй поймать"?

Shaheer Rizwan

Я запустил его без всяких попыток и вот что вышло https://imgur.com/a/a7hUv17

0x01AA

Таким образом, он показывает вам детали() длиной 7. К сожалению, я не вижу, на какой линии. Но в любом случае, потому что вы жестко закодировали цикл "от 0 до 7", это было бы проблемой (строка в csv не имеет 8 полей.

Попробуйте что-то вроде этого (я не знаю VB)
For i As Integer = 0 To details.Length - 1

1 Ответов

Рейтинг:
1

OriginalGriff

Почти наверняка, это было скрыто вашей обработкой ошибок:
Никогда не "глотайте" исключения:

Catch ex As Exception
End Try
Сообщайте о них пользователю, регистрируйте их, делайте что-то с ними или не утруждайте себя попытками ... Лови вообще.

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

И мы не можем сказать, что происходит здесь в результате - и даже если бы мы могли, мы не могли бы проверить это, потому что у нас нет никакого доступа к вашим данным.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Shaheer Rizwan

итак... должен ли я попробовать что-то еще, кроме попытки? Я немного нуб когда дело доходит до кодирования и это для задания так что я подчеркиваю так что извините если я не был досконально объяснил свою проблему

0x01AA

Оооо так очевидно, а я этого не вижу :румянец:. +5

Shaheer Rizwan

ну, я запустил отладчик и прошел через него, и я все еще не могу понять это

OriginalGriff

Он "прошел через это", потому что вы проглатываете исключение. Если вы добавляете блок Catch, это означает, что "я знаю, что делаю с этой ошибкой, поэтому не беспокойтесь об этом". Так что это не так. Ваше приложение не перестает работать, отладчик не вызывает перерыв для вас. Ошибка бесшумно и таинственно ускользает куда-то вдаль, так что никто ее не видит. Ваш код идет не так, и не отображает то, что вы ожидали, но вы понятия не имеете, почему.

Так что хватит глотать исключения!

Поместите точку останова в верхней части этого метода и один шаг вашего пути через него. Почти наверняка он "прыгнет" откуда - то из этого кода в блок Catch-так что вы можете посмотреть на объект исключения и увидеть, почему он прыгнул туда (вы уже будете знать, откуда он прыгнул).

Вооружившись этой информацией, вы должны быть в состоянии понять, почему. Но без него? Свист в темноте ...

Shaheer Rizwan

Я запустил его, удалив операторы Try, и вот что получилось: https://imgur.com/a/a7hUv17

Shaheer Rizwan

Nvm я его починил. Хотя я не мог понять его сначала, это было действительно очень полезно. Спасибо мужик

Shaheer Rizwan

На самом деле главная проблема заключалась не в коде (полу). Сначала я удалил операторы try, затем изменил столбец, который был combobox, на обычное текстовое поле, и это сработало. Я просто собираюсь проверить эту колонку, чтобы теперь принимать только цифры.

OriginalGriff

Всегда пожалуйста!

И ... перестаньте глотать исключения - посмотрите, насколько они могут быть полезны? :смеяться:

Shaheer Rizwan

да, я так и сделаю :) лол