Как запустить расчет, когда обновляется любая ячейка таблицы данных - PullRequest
0 голосов
/ 18 мая 2018

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

Теперь я хочу, чтобы это происходило всякий раз, когда значение вводится в таблицу данных или редактируется (один из столбцов - количество продукта), поэтому при вводе оно должно повторить вычисления ... так в какую пустоту я должен добавить этот код?

private void btnClearPN_Click(object sender, EventArgs e)
{
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        decimal a = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
        decimal b = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);

        decimal c = a * b;

        dataGridView1.Rows[i].Cells[4].Value = c.ToString();


    }
    GrandTotal();
    Qty();
}

1 Ответ

0 голосов
/ 19 мая 2018

Первый вариант - обновить значения ячеек, когда пользователь завершил редактирование

Вам следует обработать событие CellEndEdit объекта DataGridView, если вы хотите обновить DataGridView после завершения работы пользователя.редактирование значений (это определяется переходом пользователя в следующую ячейку или переходом к другому элементу управления в вашей форме).Для получения дополнительной информации см. MSDN - Событие DataGridView.CellEndEdit .

Происходит, когда режим редактирования останавливается для текущей выбранной ячейки.

    private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs dataGridViewCellEventArgs)
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            decimal a = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value);
            decimal b = Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value);

            decimal c = a * b;

            dataGridView1.Rows[i].Cells[4].Value = c.ToString();
        }

        GrandTotal();
        Qty();
    }

Второй вариант - обновлять значения ячеек, когда пользователь печатает

Использование этого метода немного сложнее и требует правильной обработки события EditControlShowing, а для TextBox это TextChanged event.

Вам следует обработать событие EditControlShowing объекта DataGridView, если вы хотите обновить DataGridView, когда пользователь печатает.Это событие даст вам доступ к элементу управления Edit.Для простых установок DataGridView это TextBox.Хотя это может быть ComboBox, CheckBox или любое количество других элементов управления.

См. MSDN - DataGridView.EditingControlShowing Event для получения дополнительной информации.

Происходиткогда отображается элемент управления для редактирования ячейки ..

    private DataGridViewRow CurrentRow;
    private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs dataGridViewEditingControlShowingEventArgs)
    {
        CurrentRow = dataGridView1.CurrentRow;
        TextBox textBox = dataGridViewEditingControlShowingEventArgs.Control as TextBox;
        if (textBox != null)
        {
            textBox.TextChanged -= textBox_TextChanged;
            textBox.TextChanged += textBox_TextChanged;
        }
    }

    private void textBox_TextChanged(object sender, EventArgs eventArgs)
    {
        TextBox textBox = (TextBox)sender;
        decimal a = Convert.ToDecimal(CurrentRow.Cells[2].Value);
        decimal b = Convert.ToDecimal(CurrentRow.Cells[3].Value);

        decimal c = a * b;

        CurrentRow.Cells[4].Value = c.ToString();
    }

Примечание: Обязательно добавьте строку:

textBox.TextChanged -= textBox_TextChanged;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...