2015-03-18 4 views
2

Я пытаюсь создать dataGridView, который имеет 2 столбца, столбец 1 содержит имена, а столбец 2 содержит числа, которые работают нормально.Подсчитывать значения из выбранных строк из dataGridView

Теперь я хочу разрешить пользователю выбирать одну или несколько строк с помощью клавиатуры или мыши, которая должна автоматически суммировать столбец чисел на основе выбранных строк.

Я до сих пор имеют следующее:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (dataGridView1.SelectedCells.Count > 0) 
     { 
      int selectedrowindex = dataGridView1.SelectedCells[0].RowIndex; 

      DataGridViewRow selectedRow = dataGridView1.Rows[selectedrowindex]; 

      string a = Convert.ToString(selectedRow.Cells[0].Value); 
     } 
    } 

Где string a в конечном итоге показать общее в метке формы.

Но это, кажется, неправильный способ сделать то, что я пытаюсь достичь. Какие-либо предложения?

+0

Ваш код показывает только текущую ячейку? Вы хотите получить ** общую сумму ** выбранных номеров? – bokibeg

ответ

1

Если вы хотите, чтобы найти в общей сложности конкретного столбца выбранных строк «значение:

int total = dgv.SelectedRows.Cast<DataGridViewRow>().Sum(
    row => (int) row.Cells[colSomeNumber.Name].Value); 

Если вы хотите, чтобы найти в общей сложности выбранных ячеек» значений:

int total = dgv.SelectedCells.Cast<DataGridViewCell>().Sum(cell => (int) cell.Value); 

Если вы хотите найти общее количество выбранных ячеек только для некоторых столбцов, сделайте это так:

int total = dgv.SelectedCells.Cast<DataGridViewCell>().Where(
    c => c.OwningColumn == colSomeNumber).Sum(cell => (int) cell.Value); 

Где colSomeNumber является актуальным колонка.

Просто положите его на событие dgv_SelectionChanged и все. Это в значительной степени «самый опрятный» способ сделать это.

+1

Это работает, но только если я нажимаю на фактическое содержимое внутри ячеек. Как заставить его работать, если какая-либо часть строки нажата, чтобы выбрать его? – oshirowanen

+0

В настоящее время это выглядит так: 'this.dataGridView1.CellContentClick + = new System.Windows.Forms.DataGridViewCellEventHandler (this.dataGridView1_CellContentClick);' Кажется, что это не изменяет '_SelectionChanged'. – oshirowanen

+1

[SelectionChanged] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.selectionchanged (v = vs.110) .aspx) - это еще одно событие, возможно, более подходящее для того, что вы необходимость. Если вы хотите, чтобы он срабатывал по выбранным * строкам *, я рекомендую вам изменить SelectionMode, например. '.SelectionMode = DataGridViewSelectionMode.FullRowSelect;' и использовать первое решение из ответа (пользователь все равно сможет редактировать отдельные ячейки). – bokibeg

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