0

我有一个带有 a 的表单,它通过使用数据适配器 ( )DataGridView填充到表单中。它显示了人员的,和(这是数据库中基础表的主键)。然而,其中的行按字段排序(通过使用传递给数据适配器的语句中的子句)。ConstructorDataSourceAdsDataAdapterfirst namesurnamereference numberDataGridViewsurnameORDER BYSELECT

填充之后DataGridView,我希望能够surname在 a 中键入 a TextBox,并DataGridView导航到第一行,其中的第一个字母surname与用户键入的内容相匹配。

我该如何做这个导航?

4

1 回答 1

1

“导航”解决方案

private void textBox1_TextChanged(object sender, EventArgs e)
{
  for (int i=0;i<theDataGridView.RowCount;i++)
  {
    if (theDataGridView.Rows[i].Cells["surname"].Value.ToString().StartsWith(textBox1.Text))
    {
      theDataGridView.CurrentCell = theDataGridView.Rows[i].Cells["surname"];
      // optionally
      theDataGridView.FirstDisplayedScrollingRowIndex = theDataGridView.CurrentCell.RowIndex;
      break ;
    }
  }
}

“过滤器”解决方案

首先,通过 BindingSource 将 DataTable 绑定到 DataGridView。

BindingSource theBindingSource = new BindingSource() ;
theBindingSource.DataSource    = theDataTable ;
theDataGridView.DataSource     = theBindingSource ;

然后在 TextChanged 事件中设置 BindingSource 的 Filter 属性:

private void textBox1_TextChanged(object sender, EventArgs e)
{
  theBindingSource.Filter = "surname LIKE '"+textBox1.Text+"%'";
  // if no match : Cancel filter
  if (theDataGridView.RowCount==0) theBindingSource.Filter = "" ; 
}
于 2015-07-21T22:32:42.643 回答