2011-08-03 78 views
5

我怎樣才能循環訪問DataGridView的行(我有2列),然後將這2列存儲在一個變量中,我將用作sql查詢的參數?不設置爲一個對象的一個​​實例我如何獲得DataGridView行值並存儲變量?

對象引用 -

foreach (DataGridViewRow Datarow in contentTable_grd.Rows) 
      { 
       contentValue1 = Datarow.Cells[0].Value.ToString(); 
       contentValue2 = Datarow.Cells[1].Value.ToString(); 

       SqlParameter param4 = new SqlParameter("@contentTableValue1", contentValue1); 
       SqlParameter param5 = new SqlParameter("@contentTableValue2", contentValue2); 

      } 

我使用的上述代碼時收到這個錯誤。

+0

什麼是你想要做你的代碼沒有實現的問題? –

+0

@andrewcooper我有2列,對於每一行我想獲得這些值,並將其存儲在一個變量,然後將其插入到數據庫然後移動到下一行。 –

+0

哪一行發生錯誤? 'contentTable_grd'是否存在? –

回答

3

發現我需要一個if語句,以防止空單元格經歷

foreach (DataGridViewRow Datarow in contentTable_grd.Rows) 
    { 
     if (Datarow.Cells[0].Value != null && Datarow.Cells[1].Value != null) 
     { 
      contentValue1 = Datarow.Cells[0].Value.ToString(); 
      contentValue2 = Datarow.Cells[1].Value.ToString(); 
      MessageBox.Show(contentValue1); 
      MessageBox.Show(contentValue2); 
     } 

    } 
+1

好的結果。有一件事你可能會考慮,有時候你想要將null值傳遞給你的過程...另外 - checkout string.isnullorempty()作爲!= NULL的替代品... – Chains

1

什麼是contentValue1?

不知道c# - 它可以隱式輸入變量嗎?也許你可以試試string contentvalue1 = ...

另外,根據什麼樣的控制可能是在細胞......你會做這樣的事情

string contentvalue1 = CTYPE(DataRow.FindControl("myTextbox"),textbox).text

5

最有可能的問題是,一個或兩個您正在引用的單元格包含空值,並且當您嘗試在此類單元上調用ToString()時引發異常。

一種解決方案是使用?? operator返回默認值您的參數,如果一個單元格數值爲空:

contentValue1 = Datarow.Cells[0].Value ?? string.Empty; 
contentValue2 = Datarow.Cells[1].Value ?? string.Empty; 

此代碼,如果一個單元格的值是零會返回一個空字符串;你可能希望使用不同的默認值。