2014-02-06 1 views
0

Итак, я просто сделал быстрый тест, чтобы проверить, правильно ли был установлен мой код для корректного чтения из DataGrid, но как только он заканчивается чтение Я получаю ошибку "Object reference not set to an Instance of an object", и я не уверен, о чем идет речь. Это потому, что цикл продолжается после того, как rows дошел до конца DataGrid?Ошибка «Ссылка на объект не установлена ​​на экземпляр объекта» при чтении из DataGrid

public static void UploadFromExtrernalSource(PlantAreaCode_CreateView PACCreate) 
{ 
    // For each row in the DataGrid, and for each column, stores the information in a string. 
    for (int rows = 0; rows < PACCreate.dataGridView1.Rows.Count; rows++) 
    { 
     for (int col = 0; col < PACCreate.dataGridView1.Rows[rows].Cells.Count; col++) 
     { 
      string value = PACCreate.dataGridView1.Rows[rows].Cells[col].Value.ToString(); 
      Console.WriteLine(value + ","); 
     } 
    } 
} 

EDIT: Также при печати на консоль, он печатает каждое значение на новой строке. Зачем?

+0

вы трассировать код проверки фактических строк и подсчет клеток –

+0

К сожалению, я не уверен, что вы просите. Количество столбцов и строк не задано, так как это будет использоваться для нескольких таблиц. – Ben

+0

Console.WriteLine всегда печатает значение в newline.Try Console.write –

ответ

1

задачи1: Вы пытаетесь преобразовать значение null из одной из ячеек в String.

Решение1: перед преобразованием значения ячейки в String выполните нулевую проверку.

Задача 2: вы используете Console.WriteLine() метод для отображения каждой ячейки value.so, что он печатает каждое значение ячейки в новом Row/Line.

Решение 2: вам нужно использовать Console.Write() метод вместо Console.WriteLine() для печати значений ячеек, и сразу же после печати всех значений ячеек из данной строки необходимо использовать Console.WriteLine() для печати новой строки.

Предложение: вам не нужно объявить строковую переменную value каждый раз в цикле, так что вы можете переместить объявление переменной строки из цикла.

Попробуйте это:

public static void UploadFromExtrernalSource(PlantAreaCode_CreateView PACCreate) 
{ 
    // For each row in the DataGrid, and for each column, stores the information in a string. 
    String value = String.Empty; 
    for (int rows = 0; rows < PACCreate.dataGridView1.Rows.Count; rows++) 
    { 
     for (int col = 0; col < PACCreate.dataGridView1.Rows[rows].Cells.Count; col++) 
     { 
      if(PACCreate.dataGridView1.Rows[rows].Cells[col].Value!=null) 
      { 
       value=PACCreate.dataGridView1.Rows[rows].Cells[col].Value; 
       Console.Write(value + ","); 
      } 
      else 
      { value=String.Empty; } 
     } 
     Console.WriteLine();//it prints a new line 
    } 
} 
+0

Спасибо, что узнал, что для меня действительно прояснили мое понимание того, что на самом деле происходит здесь :) – Ben

0

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

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