Member 12349103 Ответов: 2

Нулевая ссылка при записи в файл. csv


У меня есть эта ошибка при попытке записать файл. csv обратно в мою папку Lib. не знаю, как сделать пробный улов. Помогите, пожалуйста.

Спасибо ребята

ошибки на линии (система.NullReferenceExpetion)

foreach (Lunch s in lunchBindingSource.DataSource as List<Lunch>)



майский код

<pre>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);
               }
           }
       }


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

new List<String>();


List<String> names = new List<String>();
      names.Add("");

[no name]

Ладно, так в чем же твой вопрос?

Member 12349103

Когда я пытаюсь сохранить новый файл. Csv и загрузить его, я получаю ошибку.

[no name]

Да, я умею читать. Какой у вас вопрос?

CHill60

Таким образом, lunchBindingSource не был создан

cvogt61457

Либо lunchBindingSource не был создан, либо это не объект List<lunch>.

Karthik_Mahalingam

какая линия

2 Ответов

Рейтинг:
12

Member 7870345

Привет:
Проверяя ваш код, можно увидеть, что ни luncBindingSource ни luncBindingSource.DataSource являются нулевыми.

Но в foreaech вы используете:

foreach (Lunch s in lunchBindingSource.DataSource as List<Lunch>)
это можно было бы написать:
var l=lunchBindingSource.DataSource as List<Lunch>;
foreach (Lunch s in l)

преобразование luncBindingSource.DataSource К List<Lunch> конечно, это проблема (то есть luncBindingSource.DataSource не может быть преобразован в List<Lunch> так что его ноль).


Member 12349103

Решение 1 почти сделало свое дело, но получило ошибку на l в этой строке.
Системы.NullReference

foreach (Lunch s in l)


Я добавлю код записи и чтения.

Спасибо

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));
                        var l = lunchBindingSource.DataSource as List<Lunch>;
                        foreach (Lunch s in l)

                        {
                            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
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            lunchBindingSource.DataSource = new List<Lunch>();
        }
    }
}

Рейтинг:
12

Member 7870345

Еще раз здравствуйте:
В предыдущем сообщении я сказал, что

surelly the problem  is luncBindingSource.DataSource can not be converted to List<Lunch> so it´s null


Если вы используете:
List<Lunch> l=lunchBindingSource.DataSource as List<Lunch>;
if (l==null)
{
    MessageBox.Show("Error DataSource can not be converted to List.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
   return;
}
foreach (Lunch s in l)


вы увидите, что проблема заключается в том, что источник данных не может быть преобразован в список "обед".
Итак, вам нужно написать код, который преобразует это.


Member 12349103

Спасибо, Ребята...