Событие изменения значения ячейки, c # - PullRequest
2 голосов
/ 29 сентября 2010

У меня есть DataGridView, в котором есть 3 столбца;Количество, ставка и сумма.
DataGridView является редактируемым.Когда я ввожу значение в столбец ставки, сразу же значение должно быть изменено в сумме.

Amount=Qty*rate

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

Ответы [ 3 ]

5 голосов
/ 29 августа 2011

Как уже упоминал Сачин Шанбхаг, вы должны использовать и события DataGridView.CurrentCellDirtyStateChanged и DataGridView.CellValueChanged. В DataGridView.CurrentCellDirtyStateChanged вы должны проверить, изменяет ли пользователь правую ячейку ( Rate в вашем случае), а затем выполнить DataGridView.CommitEdit метод. Вот некоторый код.

private void YourDGV_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (YourDGV.CurrentCell.ColumnIndex == rateColumnIndex)
    {
        YourDGV.CommitEdit(DataGridViewDataErrorContexts.Commit);                        
    }
}

private void YourDGV_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == rateColumnIndex)
    {
        DataGridViewTextBoxCell cellAmount = YourDGV.Rows[e.RowIndex].Cells[amountColumnIndex];
        DataGridViewTextBoxCell cellQty = YourDGV.Rows[e.RowIndex].Cells[qtyColumnIndex];
        DataGridViewTextBoxCell cellRate = YourDGV.Rows[e.RowIndex].Cells[rateColumnIndex];
        cellAmount.Value = (int)cellQty.Value * (int)cellRate.Value;
    }
}
1 голос
/ 07 декабря 2013

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

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

Это код, который я нашел при просмотре одного из форумов MSDN:

http://social.msdn.microsoft.com/Forums/windows/en-US/a56ac5c1-e71f-4a12-bbfa-ab8fc7b36f1c/datagridview-text-changed?forum=winformsdatacontrols

Я также добавляю код здесь:

void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

{

   if (dataGridView1.CurrentCell.ColumnIndex == 0)
   {

      TextBox tb = (TextBox)e.Control;
      tb.TextChanged += new EventHandler(tb_TextChanged);
   }
}

void tb_TextChanged(object sender, EventArgs 
{
   MessageBox.Show("changed");
}
0 голосов
/ 29 сентября 2010

Если вы действительно хотите обновить значение без изменения ячеек (как на лету), вам придется обработать событие DataGridView.KeyPress и проверить, какая ячейка обновляется.*

Если это слишком хлопотно, используйте событие DataGridView.CellValueChanged .Это проще реализовать, чем событие KeyPress.

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