Zain -Ul- Arifeen Ответов: 3

Как суммировать значения двух строк внутри datagridview c#


Как суммировать значения двух строк внутри DataGridView, если id из обеих строк то же самое и создать одну строку вместо двух строк в DataGrid?

Как в следующем примере:
id           quantity       Bonus        price           total

01             25           10           123            4305

01             5             10          123            1845



Я хочу суммировать вышеприведенные две строки следующим образом: DataGrid.
id           quantity        Bonus         price          total

01              30            20             123          6150



если я возьму цикл на нем, то дублирую вставку значения в datagridview.

как мой код

Например:

for(int i=0; i<datagridview.rows.count; i++)
{

if(datagridview.rows[i].cells[0].value==txtid.Text)
{
if(comboboxtype=="запас")
{
//на склад
///код обновления,если значение существует в datagrid
}
еще
{
//на бонусы
///код обновления,если значение существует в datagrid
}

}
еще
{
if(comboboxtype=="запас")
{
//на склад

/// ///Код вставки, если значение не существует в сетке данных
}
еще
{
/// на бонусы
/// ///Код вставки, если значение не существует в сетке данных
}


}
}



Пожалуйста,кто-нибудь может мне помочь?

Thanks7872

Опубликуйте код, чтобы показать, какие усилия вы приложили для достижения этой цели.

3 Ответов

Рейтинг:
1

Jassom

Я предлагаю вам это решение:

перед вставкой новой строки в datagridview проверьте, вставлен ли идентификатор уже в datagridview, поэтому, если он вставлен раньше -> сделайте это:

private void button1_Click(object sender, EventArgs e)
        {
            bool theItemIsExist = false;

            // this (for) loop is to check if the id is already exist .. if true sum new values to the old values
            for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
            {
                if (dataGridView1.Rows[i].Cells[0].Value.ToString() == TXTID.Text)
                {
                    dataGridView1.Rows[i].Cells[1].Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[1].Value) + Convert.ToDecimal(TXTQuantity.Text);
                    dataGridView1.Rows[i].Cells[2].Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value) + Convert.ToDecimal(TXTBonus.Text);
                    dataGridView1.Rows[i].Cells[3].Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value) + Convert.ToDecimal(TXTPrice.Text);
                    dataGridView1.Rows[i].Cells[4].Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value) + Convert.ToDecimal(TXTTotal.Text);

                    theItemIsExist = true;
                    break;
                }
            }

            // after checking the list and there is no id exist .. then add new line with values
            if (!theItemIsExist)
            {
                dataGridView1.Rows.Add(TXTID.Text, TXTQuantity.Text, TXTBonus.Text, TXTPrice.Text, TXTTotal.Text);
            }
        }


Я проверил его , и он работает

Примечание: внесите некоторые изменения в этот код, чтобы он соответствовал вашему (названия инструментов и т. д.)


Рейтинг:
0

CodeBlack

Я хотел бы предложить, чтобы использовать LINQ-запрос, чтобы назначить источник данных для сетки, как указано ниже :

Например мое имя класса тогда Сток

Класс акций:

public class Stock
    {
        public int Id { get; set; }

        public int Quantity { get; set; }

        public int Bonus { get; set; }

        public int Price { get; set; }

        public int Total { get; set; }
    }


Затем ниже linq запрос должен быть использован для назначения источника данных :

var stocks = stockList.Select(s => s.Id).Distinct().Select(stock => new Stock
                {
                    Id = stock,
                    Quantity = stockList.Where(s => s.Id == stock).Sum(s => s.Quantity),
                    Bonus = stockList.Where(s => s.Id == stock).Sum(s => s.Bonus),
                    Price = stockList.Where(s => s.Id == stock).Select(s => s.Price).FirstOrDefault(),
                    Total = stockList.Where(s => s.Id == stock).Sum(s => s.Total),
                }).ToList();


Примечание : Приведенный выше запрос суммирует все свойства, кроме идентификатора и цены. а stockList-это объект списка акций, который содержит все данные для акций.


Zain -Ul- Arifeen

если я возьму цикл на нем, то дублирую вставку значения в datagridview.

как мой код

Например:

for(int i=0; i

Рейтинг:
0

gourav agrawal

используйте запрос linq для вашего набора данных с функцией sum и предложением group by...

любить.....

var rows = from a in query
группа а по новому {
H = а.гр.BookingRefex,
Б = а.гр.ClientRefex,
С = а.б.PickupCity,
д = а.б.PickupPostalCode
} в g
выберите новый {
BookingRefex = g.Key.h,
ClientRefex = g.Key.b,
SumQuantity = g.Sum(p => p.bg.Quantity),
Значение = гр.Первый().гр.Значение
}