Как я могу рассчитать итоговую сумму из datagridview с одной датой? - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу, чтобы код вычислял итоговую сумму с другой добавленной датой. Как ежедневная подготовка отчета о продажах. Я должен рассчитать общее количество гранд с той же добавленной датой в этой картинке data

Это код, который у меня есть

private void btnsubtootal_Click(object sender, EventArgs e) {
    int sum = 0;

    for (int i = 0; i < dgvPurchase.Rows.Count; ++i) {
        sum += Convert.ToInt32(dgvPurchase.Rows[i].Cells[5].Value);
    }

    txtNetSales.Text = "" + sum.ToString();        
}

private void bindgrid()
    {
        SqlConnection conn = new SqlConnection(myconnstrng);
        conn.Open();
        str = "select * from tbl_sales";


        cmd = new SqlCommand(str, conn);

        adapter = new SqlDataAdapter(cmd);

        ds = new DataSet();

        adapter.Fill(ds, "grand_total");

        dgvPurchase.DataMember = "grand_total";

        dgvPurchase.DataSource = ds;

        conn.Close();
    }

1 Ответ

0 голосов
/ 03 мая 2019

Если вы действительно хотите рассчитать значение «Чистых продаж» с помощью кнопки, то вы можете сделать что-то вроде этого:

enum GVColumns
{
    //We make an enum for our GridView columns
    Id = 0,
    CustomerName,
    BillNum,
    SubTotal,
    Discount,
    GrandTotal,
    Credit,
    AddedDate,
    AddedBy
}

private void btnsubtootal_Click(object sender, EventArgs e)
{
    decimal grandtotalByDate = 0;
    DateTime searchedDate = new DateTime();

    foreach (DataGridViewRow row in dgvPurchase.SelectedRows)
    {
        var txtDateAddedValue = row.Cells[(int)GVColumns.AddedDate].Value.ToString();
        searchedDate = DateTime.Parse(txtDateAddedValue); //get our "added_date" to search
    }

    foreach (DataGridViewRow row in dgvPurchase.Rows)
    {
        var txtGrandTotalValue = row.Cells[(int)GVColumns.GrandTotal].Value.ToString(); //"grand_total" cell value as string
        var txtDateAddedValue = row.Cells[(int)GVColumns.AddedDate].Value.ToString(); //"added_date" cell value as string
        var rowDateAddedValue = DateTime.Parse(txtDateAddedValue);

        //check if our dates match
        if (rowDateAddedValue.Date == searchedDate.Date)
        {
            //add "grand_total" values if dates match
            grandtotalByDate += decimal.Parse(txtGrandTotalValue);
        }
    }

    txtNetSales.Text = grandtotalByDate.ToString("N2");
}

Но я бы действительно порекомендовал изменить логику использования кнопки, чтобы просто использовать событие RowStateChanged вашего GridView, поэтому вы просто выбираете строку и она вычисляет ее:

private void dgvPurchase_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
    if (e.StateChanged == DataGridViewElementStates.Selected)
    {
        var txtDateAddedValue = e.Row.Cells[(int)GVColumns.AddedDate].Value.ToString();

        DateTime searchedDate = DateTime.Parse(txtDateAddedValue);
        decimal grandtotalByDate = 0;

        foreach (DataGridViewRow row in dgvPurchase.Rows)
        {
            var txtDAV = row.Cells[(int)GVColumns.AddedDate].Value.ToString();
            var dateRow = DateTime.Parse(txtDAV);

            if (dateRow.Date == searchedDate.Date)
            {
                var txtGrandTotalValue = row.Cells[(int)GVColumns.GrandTotal].Value.ToString();
                grandtotalByDate += decimal.Parse(txtGrandTotalValue);
            }
        }

        lblTotalByDate.Text = grandtotalByDate.ToString("N2");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...