我想通过在文本框中输入要查找的值来选择DataGridView的行。另外,我希望将最相同的值集中在/选定上。 我已经尝试使用rowfilter函数,该函数给了我:
(dgv_DetailComptes.DataSource as DataTable).DefaultView.RowFilter = string.Format("Champ LIKE '%{0}%'", tbx_champ_Cpt.Text);
但是,它过滤行,这意味着当其他行的内容不是我要查找的行时,其他行就会消失。我想将行保留在表中,然后选择包含要查找的值的行。
另外,我的DGV从数据表中获取行/列/值,因此可能阻止我使用DataGridView的行索引来搜索包含值的行。
有没有办法选择我的行? 谢谢您的回答。
答案 0 :(得分:0)
最后我设法找到了,也许做了一些我不知道的无用的事情。 这是代码:
private void tbx_champ_Cpt_TextChanged(object sender, EventArgs e)
{
if (tbx_champ_Cpt.Text.ToString() == "")
{
for (int i = 0; i < dgv_DetailComptes.Rows.Count - 1; i++)
{
dgv_DetailComptes.Rows[i].Selected = false;
}
}
else
{
tbx_champ_Cpt.SelectionStart = tbx_champ_Cpt.Text.Length;
tbx_champ_Cpt.Text = tbx_champ_Cpt.Text.ToString().ToUpper();
DataTable d = (DataTable)dgv_DetailComptes.DataSource;
String text = tbx_champ_Cpt.Text.ToString();
DataRow[] row = d.Select("Champ like '%" + text + "%'");
List<int> listeIndex = new List<int>();
for (int i = 0; i < dgv_DetailComptes.Rows.Count - 1; i++)
{
foreach (DataRow r in row)
{
if (((DataRowView)dgv_DetailComptes.Rows[i].DataBoundItem).Row == r)
{
dgv_DetailComptes.Rows[i].Selected = true;
listeIndex.Add(i);
}
else if (!listeIndex.Contains(i))
{
dgv_DetailComptes.Rows[i].Selected = false;
}
}
}
}
if (dgv_DetailComptes.SelectedRows.Count != 0)
{
dgv_DetailComptes.FirstDisplayedScrollingRowIndex = dgv_DetailComptes.SelectedRows[0].Index;
}
}