2010-04-17 33 views
0

我有一個包含9列的datagridview。我只是想把第5列中的值從第6列中減去,然後在第9列中顯示結果。似乎很簡單,我知道它始終在Excel中完成。但我無法弄清楚這一點。我是否需要使用稱爲計算列的方法創建新類?或者datagridview類有內置的東西可以處理這個問題?如何在datagridview中做簡單的數學

+0

一般提示:不要將DataGridView用作數據存儲。將它綁定到表或列表。 – 2010-04-17 08:07:25

回答

1
public void dataGridView_Cellformatting(object sender, DataGridViewCellFormattingEventArgs args) 
{ 
    if(args.ColumnIndex == 9) //Might be 8, I don't remember if columns are 0-based or 1-based 
    { 
     DataGridViewRow row = dataGridView.Rows[e.RowIndex]; 
     args.Value = (int)row.Cells[6].Value - (int)row.Cells[5].Value; 
    } 
} 

鏈接:CellFormatting事件,DataGridViewcellFormattingEventArgs

+0

謝謝你藍色拉賈。我收到一個錯誤說錯誤\t \t「操作員‘ - ’不能應用於類型‘System.Windows.Forms.DataGridViewCell’的操作數和‘System.Windows.Forms.DataGridViewCell’\t」 有什麼想法? – 2010-04-17 04:58:06

+0

EB - 這是因爲row.Cells [index]將返回一個DataGridViewCell對象。您應該調用單元格的Value屬性並按照Anthony Pegram的方式將其解析爲一個整數。 順便說一句,Raja的代碼只有在你編輯第9列中的某些東西時纔會被調用,我不知道你想要什麼。 – 2010-04-17 12:56:14

+0

@EB:固定。不過,我想我應該問過;你想如何使用它?我想我想你有第5和第6列綁定到數據源,這通常是你想要做的。但是,如果您嘗試像使用excel一樣使用數據網格,則最好處理CellEndEdit事件。 – 2010-04-17 14:50:26

1

下面的示例代碼顯示瞭如何檢索給定位置(列和行,0索引)的值,然後嘗試將這些值轉換爲數字。然後,您可以將計算存儲回DataGridView中的另一個單元格中。

object value1 = dataGridView1[4, 0].Value; 
object value2 = dataGridView1[5, 0].Value; 

int val1, val2; 
if (int.TryParse(value1.ToString(), out val1) && int.TryParse(value2.ToString(), out val2)) 
{ 
    dataGridView1[8, 0].Value = val1 - val2; 
} 
else 
{ 
    MessageBox.Show("cannot subtract, invalid inputs."); 
} 
+0

感謝您回覆安東尼。我在窗體類中實現了你的代碼。它看起來不錯,但是當我調試它時,我在2列中輸入了值,而在列9中沒有發生任何事情。我是否應該在特定事件處理程序中實現此代碼?我已經在DataGridView_CellEndEdit事件處理程序中嘗試過了,並且什麼都沒有發生。我應該在buttonclick事件中使用你的代碼嗎? – 2010-04-17 04:50:49

1

綁定你的DataGridView到DataTable,並給列相關的表達式。嘗試推斷此示例:

 DataTable table = new DataTable(); 
     table.Columns.Add("Column1", typeof(int)); 
     table.Columns.Add("Column2", typeof(int)); 
     table.Columns.Add("Column3", typeof(int), "Column1+Column2"); 
     dataGridView1.DataSource = table; 

其中'dataGridView1'是一個典型的DataGridView控件。