Atul Rokade Ответов: 2

Как показать общий итог в нижнем колонтитуле datagridview


Всем привет,

Я хочу показать grand total в нижнем колонтитуле datagridview но здесь я не использую никакого подключения к базе данных я хочу показать grandtotal без использования какого либо подключения к базе данных для этого я написал код но он не работает

Что я уже пробовал:

Примечание : Я не использую никакого подключения к базе данных, я хочу показать эту сумму без какого-либо подключения к базе данных
Всего два цвета :
private void dataGridView1_CellEndEdit_1(object sender, DataGridViewCellEventArgs e)
      {
          double cell1 = 0;
          double cell2 = 0;

          if (e.ColumnIndex == 0 || e.ColumnIndex == 2)
          {
              if (!object.ReferenceEquals(dataGridView1.CurrentRow.Cells[0].Value, DBNull.Value))
              {
                  cell1 = Convert.ToSingle(dataGridView1.CurrentRow.Cells[0].Value);
              }

              if (!object.ReferenceEquals(dataGridView1.CurrentRow.Cells[2].Value, DBNull.Value))
              {
                  cell2 = Convert.ToSingle(dataGridView1.CurrentRow.Cells[2].Value);
              }
              if (cell1.ToString() != "" && cell2.ToString() != "")
              {

                  dataGridView1.CurrentRow.Cells[6].Value = cell1 * cell2;

              }

          }

      }


Общий код :(этот код не работает)
private void dataGridView1_DataSourceChanged_1(object sender, EventArgs e)
        {
            double Total = 0;
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                Total += Convert.ToDouble(dataGridView1.Rows[i].Cells["Rupees"].Value);
            }
            dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells["Rupees"].Value = Total;
            lblsum.Text = Convert.ToString(Total);

        }

LLLLGGGG

Вы пробовали отлаживать свой код?

Atul Rokade

Отладчик не входит в код источника данных :(

CHill60

Но он войдет в код DataSourceChanged - поставит точку останова на double Total = 0; и double cell1 = 0; Если вы не попали в эти точки останова, то вы не подключили эти события должным образом (возможно, учитывая часть имени _1). Если вы все же попадете в точки останова, то пройдитесь по коду, чтобы выяснить, почему он не обновляет общую итоговую строку

Atul Rokade

это будет частное void событие dataGridView1_CellEndEdit_1, но оно не войдет внутрь события dataGridView1_DataSourceChanged_1 я использовал отладку, но сам отладчик не войдет внутрь события dataGridView1_DataSourceChanged_1

CHill60

Как вы заполняете эту сетку?

Atul Rokade

им не подключении к базе, ни стол не простой элемент

CHill60

Таким образом, он полностью пуст, и это только пользователь, который вводит данные?

Atul Rokade

да мой друг

Atul Rokade

в dataGridView1_CellEndEdit_1 код события работает нормально вычисление также приходит то, что мы хотим, но проблема в dataGridView1_DataSourceChanged_1 отладчик событий не входит в код

Karthik_Mahalingam

какой источник данных вы используете,
может ли пользователь добавить новую строку ?

Atul Rokade

я не использую здесь никакого подключения к базе данных я хочу показать эту деталь без использования базы данных в datagridview

Karthik_Mahalingam

может ли пользователь добавить новую строку ?

2 Ответов

Рейтинг:
6

CHill60

Извините, что мне потребовалось так много времени, чтобы ответить на ваш ответ на мой комментарий.

Итак, мы установили, что это пустое представление dataGridView, которое пользователь заполнит, введя значения. Вот почему событие dataGridView1_DataSourceChanged_1 является никогда уволен. Это событие будет уволено только в том случае, если вы сделаете что-то вроде

dataGridView1.DataSource = someDataTable;
что вы не собираетесь делать в сетке, которая полностью заполнена пользователем.

CellEndEdit-это правильное событие, за которое можно зацепиться, чтобы получить свой общий итог.
Эта работа:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    double cell1 = 0;   //Grand total of column 0
    double cell2 = 0;   //Grand total of column 2

    // Only interested in changes in columns 0 and 2 so ignore other columns
    if (e.ColumnIndex != 0 && e.ColumnIndex != 2) return;

    //Calculate grand total ... if only the total for this row is required
    // then comment out the foreach...
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        double c1 = 0;
        double c2 = 0;
        if (r.Cells[0].Value != null)
            if (double.TryParse(r.Cells[0].Value.ToString(), out c1))
                cell1 += c1;
        if (r.Cells[2].Value != null)
            if (double.TryParse(r.Cells[2].Value.ToString(), out c2))
                cell2 += c2;
    }
    // Insert the grand total into this row
    dataGridView1.Rows[e.RowIndex].Cells[6].Value = cell1 + cell2;

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

Код, который вы первоначально опубликовали, отлично работает для меня, за исключением того, что он вычисляет продукт (cell1, умноженное на cell2) в ряд


Atul Rokade

chill60 СПС бро :)

Рейтинг:
2

Marc Clifton

Вам нужно изменить значение в резервном источнике данных, а не в самой сетке.

Марк


Atul Rokade

Дорогой Марк не могли бы Вы уточнить пожалуйста