2010-10-06 72 views
0

dataGridview 第一行的列名稱的數量由於插入了值而返回沒有值。DataGridview跳過第一行的列值

對於我們的Peers'Convenient我繪製表格,因爲它有助於更​​好地回答它。

我上的DataGridView表如下:

private void Form1_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("name",typeof(string)); 
     dt.Columns.Add("amount",typeof(decimal)); 
     dataGridView1.DataSource = dt; 
     dataGridView1.Columns[1].DefaultCellStyle.Format = "f2"; 
    } 

現在我準備好的表格和我的主要代碼如下:

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e) 
    { 
     decimal sum = 0.00m; 

     for (int i = 0; i < dataGridView1.Rows.Count-1; i++) 
     { 
       sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value); 
       textBox1.Text = sum.ToString("f2"); 
     } 
    } 

上面的代碼拋出錯誤,如「對象可以不投從DBNull到其他類型「。即使有價值。

現在就來看看另一個代碼:

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e) 
    { 
     decimal sum = 0.00m; 

     for (int i = 0; i < dataGridView1.Rows.Count-1; i++) 
     { 
      if (dataGridView1[1, i].Value != DBNull.Value) 
      { 
       sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value); 
       textBox1.Text = sum.ToString("f2"); 

      }   

     } 
    } 

下面這段代碼不拋出任何錯誤,但仍然有它的問題。問題是當我輸入的數值時,數額看起來像是跳過第一行的列名的值數額

例如...

我輸入上的列名值低於:

1st Row column amount values is = 12 
2nd Row column amount values is = 12 
3rd Row column amount values is = 12 

現在在TextBox1中的總的表現是= 24,其中作爲實際的總爲= 36.

編碼時出現了錯誤,表明dataGridview的第一行的列值不被接受。

回答

0

最佳解決方案是如下:

private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e) 
    { 
     decimal sum = 0.00m; 

     for (int i = 0; i < dataGridView1.Rows.Count; i++) 
     { 
      if (dataGridView1[1, i].Value != DBNull.Value) 
      { 
       sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value); 
       textBox1.Text = sum.ToString("f2"); 

      } 

     } 
    } 

只需更改上面的dataGridView事件即可。

0
private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e) 
    { 
     decimal sum = 0.00m; 

     for (int i = 0; i < dataGridView1.Rows.Count; i++) 
     { 
      if (dataGridView1[1, i].Value != DBNull.Value) 
      { 
       sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value); 
       textBox1.Text = sum.ToString("f2"); 

      }   

     } 
    } 

的變化是在條件中的loop.When您的循環條件是我< dataGridView1.Rows.Count - 1.迴路除了最後一個,這就是爲什麼你會得到24,而不是36的所有行
此致
約爾丹

+0

@lordan,它不工作,它返回第一行的列值是0.00,您可以嘗試它。 – mahesh 2010-10-06 07:12:18

+0

@lordan,你很好,但試試吧。它只是回報。 0.00在textbox1中,我在第一行的第一列輸入值「12」。 – mahesh 2010-10-06 07:20:47

+0

@mahesh是否有可能把這種和平的代碼,因爲如果你正在編輯單元格的值,新的值可能不會放在單元格值中,我會建議把這個代碼放在CellEndEdit事件 – IordanTanev 2010-10-06 09:45:34