Member 12349103 Ответов: 3

C# в формате CSV помощником сохранения информации


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

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

       private void btnWrite_Click(object sender, EventArgs e)
        {
           

                using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "csv|*.csv", ValidateNames = true })
                {
                    if (sfd.ShowDialog() == DialogResult.OK)
                    {
                        using (var sw = new StreamWriter(sfd.FileName))
                        {
                            var writer = new CsvWriter(sw);
                            writer.WriteHeader(typeof(Lunch));

                            if (lunchBindingSource == null || lunchBindingSource.DataSource == null)
                            {
                                MessageBox.Show("Error in Saving.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }


                            foreach (Lunch s in lunchBindingSource.DataSource as List<Lunch>)
                            {
                                writer.WriteRecord(s);
                            }
                        }
                        MessageBox.Show("Your Data has been Successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
        }
         

private void btnRead_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "CSV|*.csv", ValidateNames = true })
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    
                        var sr = new StreamReader(new FileStream(ofd.FileName, FileMode.Open));
                        var csv = new CsvReader(sr);
                          lunchBindingSource.DataSource = csv.GetRecords<Lunch>().ToString();
                        lunchBindingSource.DataSource = csv.GetRecords<Lunch>(); /// use to create file
                    }
               }
            }

NotPolitcallyCorrect

Самое первое, что вам нужно сделать, - это перестать игнорировать исключения.
Второе, что вам нужно сделать, - это научиться отлаживать свой код. И на этот раз сделай это по-настоящему.

Karthik_Mahalingam

Всегда использовать  Ответить   кнопка для отправки комментариев / запросов заинтересованному пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

NotPolitcallyCorrect

https://www.codeproject.com/Questions/1169546/Null-reference-when-writing-to-csv-file

Опять же, какой у вас вопрос? Повторная публикация одного и того же снова и снова не поможет вам. Игнорирование исключений тоже не поможет. Вам нужно выяснить, что означает ошибка, и исправить ее. Вы уже знаете, где это происходит и почему теперь вам нужно это исправить.

NotPolitcallyCorrect

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

3 Ответов

Рейтинг:
6

Member 12349103

Я добавил этот фрагмент кода и исправил проблему.

lunchBindingSource.ResetBindings(false);
                 
                        var lunchList = lunchBindingSource.List as IList<Lunch>;
                        foreach (Lunch s in lunchList)
                        {
                            writer.WriteRecord(s);
                        }


Рейтинг:
2

Patrice T

Как вам было сказано, снимите try/catch из кода.
То try/catch именно здесь скрываются сбои в вашем коде, а также причина и позиция сбоя.
Совет: никогда не используйте try/catch, пока вы точно не знаете, почему вы это делаете. И используйте его до тех пор, пока не закончите отладку своего кода.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам.


Рейтинг:
0

OriginalGriff

Начните с того, что (как говорит NotPoliticallyCorrect) не игнорируйте исключения.
Когда вы пишете такой код:

try
{
	... code ...
}
catch (Exception ex)
{
}
Вы намеренно отбрасываете любую информацию, которая может быть доступна о том, что вызывает проблему. Это немного похоже на прокол в машине и просто включение музыки, чтобы заглушить шум - он вернется, чтобы укусить вас позже, и намного сильнее, чем если бы вы остановились и посмотрели на проблему!
Так что добавьте код в свой catch блок для сообщения о проблеме - например, MessageBox (если это приложение WinForms или WPF).
А затем поставьте точку останова на using строка в вашем обработчике щелчка кнопки чтения и шаг через код в отладчике, чтобы точно увидеть, что происходит и когда.

Вам нужна информация - и мы не можем получить ее для вас, так как у нас нет доступа к вашим данным!