2012-02-27 41 views
2

我非常困惑,並花了很長時間嘗試調試此事件。我有一列,我想添加列中的前3個單元格,並將第4個單元格更新爲第3個單元格的總和。DataGridView CellEndEdit事件不會更新除第一個以外的任何單元

這是我第一次填充前3個單元格。之後,如果我嘗試再次編輯任何單元格,則第4個單元格不會更改其值。它只有在我編輯第一個單元格時才起作用。

有誰知道爲什麼會發生這種情況?下面是這是否我的代碼的一小部分:

int sum = 0; 
for (int i = 0; i < 3; i++) 
{ 
    if (dataGridView1.Rows[i].Cells[1].Value == null) 
    sum += 0; 
    else 
    sum += int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString()) * int.Parse(dataGridView1.Rows[0].Cells[1].Value.ToString()); 
} 
dataGridView1.Rows[3].Cells[1].Value = sum; 

這些代碼行是dataGridView1_CellEndEdit函數中,我更改單元格的值後使發生。

+0

請不要在「C#」等前加上標題。這就是標籤的用途。 – 2012-02-27 02:27:35

+0

對不起,約翰,我在這裏沒有多問,而且小費一直告訴我更具體,所以我試圖把它扔進去。我會牢記以後的問題。 – LeoPardus 2012-02-27 02:28:45

+0

dataGridView1.Rows [0]應該是你的else語句中的dataGridView1.Rows [i]? – 2012-02-27 02:30:04

回答

1

我注意到這件事應該被確認/修正的一些事情。

if (dataGridView1.Rows[i].Cells[1].Value == null) 
    sum += 0; 
else 
    sum += int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString()) * 
     int.Parse(dataGridView1.Rows[0].Cells[1].Value.ToString()); 

有了這一行,你到底在幹什麼?您正在檢查此行所涉及行的第二列中的值,但是您只添加第一列中的項目(並將每個項目從第一行,第二列中各乘以一些數字)。這並不完全清楚你想要做什麼。這是處理DataGridViews的難點之一,是有更多的猜測比修改綁定的數據源。例如,你確定列(索引)實際上引用了你感興趣的項目嗎?你是否保持一致?另外,我相信CellEndEdit事件只有在編輯後特定單元格中的焦點丟失時纔會觸發。

我打算給一些修改的代碼,但不知道一些額外的信息,我可能只是得到這個錯誤。根據你所說的,你只需要列的前3個值的總和,所以這就是代碼的功能。如果這是錯的,請告訴我,我會糾正它(如果可以的話)。

// Note: Using DataGridView[int col, int row] syntax 
int sum = 0; 

for (int i = 0; i < 3; i++) 
{ 
    if (dataGridView1[1,i] != null) 
     sum += int.Parse(dataGridView1[1,i].ToString()); 
} 

dataGridView1[1,3] = sum; 
相關問題