2014-01-26 54 views
2

我有一個DataGridView,名爲IncTbl。我遍歷它,我增加的價值是什麼在列4,I指數爲yearSalary變量:爲什麼IsNewRow屬性總是返回false?

for (int i = 0; i < IncTbl.Rows.Count; i++) 
{ 
    if (IncTbl.CurrentRow.IsNewRow) break; 
    yearSalary += (decimal)IncTbl[4, i].Value; 
} 

我不想加空,因爲我會得到一個NullReferenceException,所以我我正在使用IsNewRow屬性。但是,即使是新行,它也會返回錯誤。我該如何解決這個問題?

+2

「它」,你的情況是永遠'CurrentRow',_not_你想要的行...嘗試'如果(IncTbl.Rows [我] .IsNewRow)break;' – DonBoitnott

回答

2

你不是唯一見過這種行爲的人。看起來IsNewRow已被報告爲this MSDN post中的越野車。

Incidentaly break在這方面有點不同尋常。您可能會考慮稍微調整您的循環,如下所示:

for (int i = 0; i < IncTbl.Rows.Count; i++) 
     { 
      if (!IncTbl.CurrentRow.IsNewRow) 
       yearSalary += (decimal)IncTbl[4,i].Value; 
     } 
+0

另外,對於pid的答案如下:你確定你知道IsNewRow的*語義*嗎?即使它沒有錯誤,你也需要知道它的意思是「這個行在加載DataSet後已經被UI中的用戶添加了」。您可能已經知道 - 只要確保。 – jbeldock

+0

我知道這一點:「因爲新記錄的行在Rows集合中,所以使用IsNewRow屬性來確定一行是新記錄的行還是一個已填充的行。當數據輸入時行停止爲新行該行開始。「採取從這裏:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow.isnewrow(v=vs.110).aspx - 顯然我必須重新閱讀那些東西: ) 不管怎麼說,多謝拉! – pid

+0

是的,對不起PID,我指的是OP,而不是你,他明顯知道。 :-) – jbeldock

0

您得到了IsNewRow錯誤。只有允許用戶插入新數據的行纔是真實的。綁定的行包含數據庫數據,這意味着它不是新數據,而是持久數據。

你需要避免NullReferenceException是檢查行類型。可能是標題行正在搞亂......

看看是否有幫助:RowType

-1

可以遍歷像這樣的例子:

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    decimal temp; 
    if(!row.IsNewRow && decimal.TryParse(row.Cells[4].Value.ToString(), out temp)) 
     yearSalary += temp; 
} 
相關問題