【问题标题】:How to focus a specific row in datagridview based on value in textbox?如何根据文本框中的值聚焦 datagridview 中的特定行?
【发布时间】:2017-10-16 09:59:37
【问题描述】:

我有一个datagridview dgPersons,它的内容从数据库绑定(列:idPersonpersonName).. 以相同的形式,我有文本框txtCodePersontxtPersonName

我通过填充文本框将数据添加到数据库并单击btnSave .. 然后重新固定数据以使新行在 datagridview 上可见

现在..我想通过从txtCodePerson 获取值并将选定的行设置为等于idPerson 列中的值来关注我最近添加的行

代码:

String searchValue = txtCodePerson.Text;
dgPersons.ClearSelection();
int rowIndex = -1;
foreach (DataGridViewRow row in dgPersons.Rows)
{
 if (row.Cells[0].Value.ToString().Equals(searchValue))
  {
    rowIndex = row.Index;
    break;
  }
}

但它不起作用..添加一行后所选行自动转到第一行

注意:选择最后一行不会做我想要的,因为 datagridview 数据在绑定数据后在personName 列上按字母顺序排列

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:

    您可以找到其对应列值等于指定文本的行。然后将其设置为当前行。

    例如,如果您要查找其idPerson 列等于txtCodePerson 文本的行,则可以使用以下代码:

    var searchValue = txtCodePerson.Text;    
    var row = dataGridView1.Rows.Cast<DataGridViewRow>()
        .Where(x => !x.IsNewRow)
        .Where(x => ((DataRowView)x.DataBoundItem)["idPerson"].ToString().Equals(searchValue))
        .FirstOrDefault();
    this.dataGridView1.CurrentCell = row.Cells[0];
    

    【讨论】:

    • 对不起..它没有工作...绑定数据后焦点仍然转到第一行
    • 代码已经过测试并且可以正常工作。尝试将其放入正确的事件处理程序中,并使用断点来查找问题。当有人为您发布答案时,您需要在干净的环境中测试答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多