Попробуйте следующий код:
private void SalesGridView_SelectionChanged(object sender, EventArgs e)
{
float sumNumbers = 0;
for (int i = 0; i < SalesGridView.SelectedCells.Count; i++)
{
var selectedCell = SalesGridView.SelectedCells[i];
if (selectedCell.ColumnIndex == SalesGridView.Columns["TotalBillColumn"].Index)
{
float nextNumber = 0;
if (float.TryParse(selectedCell.FormattedValue.ToString(), out nextNumber))
sumNumbers += nextNumber;
}
}
label1.Text = "selected value " + sumNumbers;
label2.Text = "nr selected cells " + SalesGridView.SelectedCells.Count.ToString();
}
Извините, из-за позднего объяснения, когда я написал этот ответ, у меня не было времени прояснить, в чем заключается ваша настоящая проблема, и я только дал вам решение, которое должно работать.
Ваша проблема может быть найдена в этой строке:
if (!SalesGridView.SelectedCells.Contains(SalesGridView.Rows[i].Cells["TotalBillColumn"]))
Если быть точным, следующий отчет даст вам неверные результаты:
SalesGridView.Rows[i]
Вы получите нежелательные результаты, поскольку i
не соответствует вашему требованию индекса вашего Rows
, поэтому давайте посмотрим, что вы написали в цикле for
.
for (int i = 0; i < SalesGridView.SelectedCells.Count; i++)
Ваш цикл for
пытается перечислить SelectedCells
вашего SalesGridView
.
Итак, давайте предположим, что вы выбрали 5 ячеек, чем ваш цикл for с перечислением от 0
до эксклюзивного 5
, поэтому я буду 0, 1, 2, 3 or 4
.
Теперь давайте снова проверим проблемное утверждение, которое я упоминал ранее:
SalesGridView.Rows[i]
Соответствует ли SelectedCell
, например, i = 0
с Rows[0]
, нет, не нужно.
Ваш SelectedCells
может быть любой строки, и ваш цикл for
всегда будет перечислять от 0
до SelectedCells.Count
, но ваше утверждение SalesGridView.Rows[i]
всегда будет пытаться получить Row
с указанным индексом i
.
Так, например:
- Вы выбираете
2
ячеек в строке 6
и 7
.
SelectedCells.Count
будет иметь 2
- Вы перечисляете
SelectedCells
, начиная с 0
до исключительного 2
, поэтому i
будет 0
или 1
- Внутри вашего цикла вы пытаетесь получить доступ к строке с помощью
i
, вызывая SalesGridView.Rows[i]
- , как указано в пункте
3.
i
, будет только 0
или 1
, но я выбрал 2
ячейки строк 6
и 7