2010-04-17 3 views
0

У меня есть datagridview с 9 столбцами. Я просто пытаюсь взять значение в столбце 5 и вычесть его из столбца 6, а затем отобразить результат в столбце 9. Это кажется достаточно простым, я знаю, что это делается в excel все время. Но я просто не могу понять это. Нужно ли мне создавать новый класс с помощью метода, называемого вычислением столбцов? Или у класса datagridview есть что-то уже построенное, которое может справиться с этим?Как сделать простую математику в datagridview

+0

Общий совет: не используйте DataGridView в качестве хранилища данных. Привяжите его к таблице или списку. –

ответ

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« любые мысли? –

+0

EB - Это потому, что row.Cells [index] вернет объект DataGridViewCell. Вы должны вызвать свойство Value ячейки и проанализировать его на целое число, как это сделал Энтони Пегем. Кстати, код Raja будет вызываться только в том случае, если вы отредактируете что-то в столбце 9, что я не уверен, что вы хотите. –

+0

@ EB: Исправлено. Однако, наверное, я должен был спросить; как вы хотите его использовать? Наверное, я полагал, что у вас есть столбцы 5 и 6, привязанные к источнику данных, который обычно вы делаете. Однако, если вы пытаетесь использовать datagrid, как вы бы превзошли, было бы лучше обработать событие CellEndEdit. –

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? –

1

Bind вашего 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.

Смежные вопросы