Как получить значение ячейки datagridview в моде редактирования, чтобы показать в текстовом поле (как Excel) - PullRequest
0 голосов
/ 10 января 2019

У меня есть DataGridView и текстовое поле. Я хочу показать значение ячейки datagridview (в режиме редактирования) в текстовое поле, как Excel. Я пытаюсь что-то вроде этого:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        var ctl = e.Control as DataGridViewTextBoxEditingControl;
        if (ctl == null)
        {
            return;
        }
        ctl.KeyPress -= ctl_Keypress;
        ctl.KeyPress += new KeyPressEventHandler(ctl_Keypress);
    }

и

private void ctl_Keypress(object sender, KeyPressEventArgs e)
    {
        var box = sender as System.Windows.Forms.TextBox;
        if (box == null)
        {                
            return;
        }
        tb_currendCellValue.Text = box.Text;            
    }

но сейчас не работает. Помогите мне, пожалуйста. спасибо.

РЕШЕНО: Заменить "KeyPress" на keyUp Для правильной работы.

1 Ответ

0 голосов
/ 11 января 2019

Я полагаю, что это ответ на ваш вопрос: Изменение значения ячейки таблицы данных в режиме редактирования

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

enter image description here

C #

private TextBox CtrlTextbox;
private void DataGridView2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (RowIdx >= 0)
    {
        CtrlTextbox = (TextBox)e.Control;
        CtrlTextbox.KeyUp += CopyText;
    }
}

private void CopyText(object sender, KeyEventArgs e)
{
    this.TextBox1.Text = sender.Text;
}

VB.NET

Dim CtrlTextbox As TextBox
Private Sub DataGridView2_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView2.EditingControlShowing
    If RowIdx >= 0 Then
        CtrlTextbox = CType(e.Control, TextBox)
        AddHandler CtrlTextbox.KeyUp, AddressOf CopyText
    End If
End Sub

Private Sub CopyText(sender As Object, e As KeyEventArgs)
    Me.TextBox1.Text = sender.Text
End Sub

EDIT:

Да, и есть еще один прекрасный способ добиться этого - привязка . См. Эту статью: Подробное руководство по привязке данных Если вы посмотрите на главу Что еще можно сделать с привязкой данных? , вы увидите именно ваш случай.

...