#c#
#c#
Вопрос:
Когда я нажимаю кнопку, я хочу умножить ячейки в строке, а затем вывести результат в другую ячейку, но делаю это индивидуально для каждой строки, код, который у меня есть прямо сейчас
foreach (DataGridViewRow Column in dataGridView1.Rows)
{
for (int i = 0; i < dataGridView1.Rows.Count; i)
{
if (dataGridView1.Rows[i].Cells[2].Value == null)
{
Column.Cells[dataGridView1.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[dataGridView1.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Amount"].Index].Value));
}
else
{
Column.Cells[dataGridView1.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[dataGridView1.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Discount"].Index].Value)) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Amount"].Index].Value);
}
}
}
Проблема в том, что если в одной ячейке отображается значение null в любой строке, то выполняется этот код для всех строк
Column.Cells[dataGridView1.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[dataGridView1.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Amount"].Index].Value));
Комментарии:
1. В чем вопрос? я не понял, что вы хотите сделать и в чем ваша проблема?
Ответ №1:
Не прямой ответ, а альтернативный подход, который должен устранить эту и подобные проблемы.
Альтернативным подходом было бы извлечь логику пользовательского интерфейса из фактического вычисления
Создайте класс для представления данных в строке
public class Purchase
{
public string Item { get; set; }
public int Amount { get; set; }
public decimal Price { get; set; }
public decimal? Discount { get; set; }
public decimal FinalPrice = Price * Amount * Discount.GetValueOrDefault(1.0m);
}
Для отображения покупок в DataGridView вам нужна только одна строка кода
var purchases = LoadPurchasesFromDatabase();
dataGridView.DataSource = purchases;
Изменения значений в экземпляре Purchase
класса автоматически обновят DataGridView.
Если вам нужно поддерживать добавление и удаление покупок из коллекции, тогда вам нужно сделать так, чтобы коллекция покупок была типа BindingList<Purchase>
Извлекая логику покупки из нашего кода пользовательского интерфейса, вы избавляетесь от утомительного и избыточного преобразования, зацикливания столбцов и строк datagridview.