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

标签 c# winforms datagridview textbox keydown

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 中来调用它,但是 sender 和 e 没有通过,我收到参数计数不匹配错误或委托(delegate)给实例方法不能有 null 'this'。我们的想法是通过按下按钮来调用 CellContentClick 事件。

任何帮助都会非常友好。

最佳答案

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

此外,如果您不使用数据绑定(bind),DataGridViewSelectionChanged 事件将被引发并可用于更新控件。

因此您可以使用以下任一选项来解决问题:

  • 将那些 TextBox 控件绑定(bind)到 DataGridView 使用的同一数据源。

  • 使用 DataGridViewSelectionChanged 事件。

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

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

如果你不使用数据绑定(bind),你可以简单地使用 DataGridViewSelectionChanged 事件和 CurrentRow 属性DataGridView 以查找这些字段并更新您的 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();
}

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

关于c# - 通过使用箭头键导航 DataGridView 来更新文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603846/

相关文章:

c# - Datagridview 单元格值变化更新数据库

c# - 访问数据 GridView 中的对象

c# - c# 8.0 switch 表达式中的多个案例

c# - 转发请求时 ClientConnectionFailure

c# - 自定义标签不显示文本字符串

c# - 将两个 RichTextbox 的内容附加为单个 RichText 字符串

c# - 如何让 ToString() 出现在 Debug 中

c# - 将 iSeries 加密 API 与 BouncyCaSTLe 结合使用

c# - 获取 ComboBox 的先前值

c# - DataSource 改变前的 DataGridView 事件