Andy Stampor
Andy Stampor

Reputation: 688

Need help editing multiple cells in a datagridview

I am trying to support editing multiple cells on a datagridview. I am nearly complete, as it correctly copies the contents to other cells when the editing is done. What I am working on now is capturing the first key pressed.

When I am editing just one cell, using EditOnKeystrokeOrF2 works fine. However, when multiple cells are selected, I am capturing the Keydown event and manually calling BeginEdit. When I do that, however, the pressed key isn't included in the edit.

How can I get that first key pressed into my cell?

Upvotes: 1

Views: 3015

Answers (2)

Andy Stampor
Andy Stampor

Reputation: 688

I did some additional experimenting and found a way to make this happen. It is a bit sloppy, but it works.

private int _keyValue;
private Boolean _checkKeyValue = false;

private void Grid1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    DataGridViewCell cell = Grid1.Rows[e.RowIndex].Cells[e.ColumnIndex];

    if (_checkKeyValue)
    {
        _checkKeyValue = false;

        if (value != -1)
        {
            cell.Value = _keyValue;
        }
    }   
}

private void Grid1_KeyDown(object sender, KeyEventArgs e)
{
    if (Grid1.SelectedCells.Count > 1)
        {
            _checkKeyValue = true;
            _keyValue = (int)e.KeyValue;
            Grid1.BeginEdit(false);
        }
}

By registering for the CellBeginEdit event, I can plop the value in there. I do some other processing of the _keyValue to make it a number, but that isn't relevant to the rest of this.

Upvotes: 1

Daniel Brückner
Daniel Brückner

Reputation: 59675

May be it is sufficent to mark the key as not handled.

private void dataGridView_KeyDown(Object sender, KeyEventArgs keyEventArgs)
{
   keyEventArgs.Handled = false;
}

Upvotes: 0

Related Questions