我希望用户能够在DataGridView(dgv)的列中搜索编号。dgv可以包含许多记录。每个记录都有一个项目编号。因此,我希望用户能够在“项目编号”列中搜索项目编号。我拥有的列有:项目ID(不可见);图像(无标题文本);项目编号:项目名称:公司;联系人。
下面是我的代码:
private void btnSearch_Click(object sender, EventArgs e)
{
string searchValue = textBox1.Text;
int rowIndex = -1;
dgvProjects.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
try
{
foreach (DataGridViewRow row in dgvProjects.Rows)
{
if (row.Cells[row.Index].Value.ToString().Equals(searchValue))
{
rowIndex = row.Index;
dgvProjects.Rows[row.Index].Selected = true;
break;
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
**问题#1:**目前为止的功能:使用者在TextBox 1中输入项目编号。当他/她按一下按钮时,程式码会在数据列中搜寻这个字串,当找到项目编号时,就会选取该数据列。它可以正常运作,但只有一次。当我想要搜寻其他项目编号时,却没有任何React。
**问题#2:**我认为可以用更好的方法来完成,即只搜索“项目名称”列的值。但是我应该如何正确地执行此操作呢?
我用来搜索的代码来自this answer
9条答案
按热度按时间7fyelxc51#
为什么要使用row.Cells[row.Index]。需要指定要搜索的列的索引(问题2)。例如,需要将row.Cells[row.Index]更改为row.Cells[2],其中2是列的索引:
owfi6suc2#
为什么不先构建一个
DataTable
,然后将其作为DataSource
分配给DataGridView
:(add您的行,手动,在一个圆圈中或通过数据库表中的
DataReader
)(分配数据源)然后用途:
您甚至可以将这段代码放在您的
textbox_textchange
事件中,您的过滤值将在您编写时显示。hwazgwia3#
最好将逻辑分离到另一个方法中,或者另一个类中。
此方法将帮助您检索在其中找到文本的DataGridViewCell对象。
nwlqm0z14#
yzuktlbb5#
直接从
DataTable
或Dataset
筛选数据:在
Textbox
的事件KeyUp
上使用此代码,将“MyTable”替换为表名或数据集,将“MyTable”替换为要进行搜索的字段。icomxhvb6#
“我的表”。默认视图。行筛选器=“LIKE '%”+文本框1.Text+“%'”;数据源=“我的表”.默认视图;
数据库连接和数据表的关系如何?我应该如何正确设置DefaultView?
我用下面的代码来获取数据:
i2byvkas7#
nkkqxpd98#
此方法将搜索DataGridView中的所有行和单元格,如果结果为true,则选择该行。
cygmwpex9#
我很可以简单地解决它: