2014-02-06 47 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 + ","); 
     } 
    } 
} 

編輯:還當我打印到控制檯,它打印在新行的每個值。爲什麼?

+0

你跟蹤代碼檢查實際行和細胞計數 –

+0

對不起,我不知道你在問什麼。列和行的數量未設置,因爲這將用於多個表。 – Ben

+0

Console.WriteLine總是以換行符打印一個值。試試Console.write –

回答

1

問題1:您試圖將其中一個單元格中的null值轉換爲String

解決方案1:在將單元格值轉換爲String之前做空檢查。

問題2:您使用Console.WriteLine()方法來顯示每個小區value.so它打印在新Row/Line每個單元的值。

解決方案2:你需要使用Console.Write()方法,而不是Console.WriteLine()打印單元格的值,而一旦從給定的行打印所有單元格的值之後,您需要使用Console.WriteLine()打印新的生產線。

建議:您不需要每次在for循環中聲明字符串變量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

嘿我想你試圖將單元格的空值轉換爲字符串。嘗試在將它轉換爲字符串之前檢查null,希望這會有所幫助!

相關問題