通过使用箭头键导航DataGridView来更新文本框

本文关键字:DataGridView 更新 文本 导航 | 更新日期: 2023-09-27 18:08:11

public delegate void MyEventHandler(object sender, DataGridViewCellEventArgs e);
public event MyEventHandler SomethingHappened;    
private void dataGridViewCargo_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DataGridViewRow rowID = this.dataGridViewCargo.Rows[e.RowIndex];
        cargoDisplayMessageIdTextBox.Text = rowID.Cells["iDDataGridViewTextBoxColumn"].Value.ToString();
        DataGridViewRow rowSender = this.dataGridViewCargo.Rows[e.RowIndex];
        cargoDisplaySubjectTextBox.Text = rowSender.Cells["subjectDataGridViewTextBoxColumn"].Value.ToString();
    }
}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    Invoke(new MyEventHandler(SomethingHappened));
    return base.ProcessCmdKey(ref msg, keyData);
}

第一部分在我选择行时更新我的文本框。第二部分是对事件处理程序的尝试。我想更新文本框只是通过导航网格与键盘。因此,用蓝色突出显示的任何行都会自动填充文本框。

我试图通过在dataGridViewCargo_CellContentClick中包含它来调用事件处理程序,但发送者和e不通过,我得到参数计数不匹配错误或委托给实例方法不能有null 'this'。我们的想法是通过按下按钮来调用CellContentClick事件。

通过使用箭头键导航DataGridView来更新文本框

当您使用鼠标或箭头键在DataGridView数据绑定的行之间移动时,其数据源的位置会发生变化,并且绑定到同一数据源的所有控件将显示来自新位置的值。

如果你不使用数据绑定,DataGridViewSelectionChanged事件将被引发,可以用来更新控件。

所以你可以使用以下任意一个选项来解决这个问题:

  • TextBox控件绑定到DataGridView使用的相同数据源

  • 使用DataGridViewSelectionChanged事件

如果您将DataGridView绑定到DataSource,那么您也可以简单地对TextBox控件使用数据绑定。将这些TextBox控件绑定到您想要通过单击每行显示的数据源字段就足够了。您可以使用设计器或代码执行数据绑定:

var data = GetDataFromSomeShere();
dataGridViewCargo.DataSource = data;
cargoDisplayMessageIdTextBox.DataBindings.Add("Text", data, "ID");
cargoDisplaySubjectTextBox.DataBindings.Add("Text", data, "Subject");

如果你不使用数据绑定,你可以简单地使用DataGridViewSelectionChanged事件和DataGridViewCurrentRow属性来查找这些字段并更新你的TextBox控件:

private void dataGridViewCargo_SelectionChanged(object sender, EventArgs e)
{
    var row = dataGridViewCargo.CurrentRow;
    cargoDisplayMessageIdTextBox.Text = 
        row.Cells["iDDataGridViewTextBoxColumn"].Value.ToString();
    cargoDisplaySubjectTextBox.Text =
        row .Cells["subjectDataGridViewTextBoxColumn"].Value.ToString();
}

首选使用数据绑定(第一个选项)