Luk*_*kas 55 c# datagridview winforms
我有一个dataGridView有3列:SystemId,FirstName,LastName使用数据库信息绑定.我想强调某一行,我会用它来做:
dataGridView1.Rows[????].Selected = true;
Run Code Online (Sandbox Code Playgroud)
然而,行ID我不知道并且bindingsource一直在变化,因此第10行在一个实例中可能是"John Smith"但在另一个实例中甚至不存在(我有一个过滤器根据用户输入的内容过滤掉源,因此输入在"joh"中会产生名字中包含"joh"的所有行,因此我的列表可以从50个名称变为3个单击中的3个.
我想找到一种方法,我可以根据SystemId和相应的数字选择一行.我可以使用以下方法获取系统ID:
systemId = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["SystemId"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)
现在我只需要将它应用于行选择器.类似于dataGridView1.Columns ["SystemId"] .IndexOf(systemId)但不起作用(这种方法也不存在).非常感谢任何帮助.
Hab*_*bib 139
这将为您提供值的gridview行索引:
String searchValue = "somestring";
int rowIndex = -1;
foreach(DataGridViewRow row in DataGridView1.Rows)
{
if(row.Cells[1].Value.ToString().Equals(searchValue))
{
rowIndex = row.Index;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
或LINQ查询
int rowIndex = -1;
DataGridViewRow row = dgv.Rows
.Cast<DataGridViewRow>()
.Where(r => r.Cells["SystemId"].Value.ToString().Equals(searchValue))
.First();
rowIndex = row.Index;
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
dataGridView1.Rows[rowIndex].Selected = true;
Run Code Online (Sandbox Code Playgroud)
jar*_*ler 21
以上答案仅在AllowUserToAddRows
设置为时才有效false
.如果该属性设置为true
,那么您将获得NullReferenceException
循环或Linq查询尝试协商新行的时间.我修改了上面接受的两个答案来处理AllowUserToAddRows = true
.
循环答案:
String searchValue = "somestring";
int rowIndex = -1;
foreach(DataGridViewRow row in DataGridView1.Rows)
{
if (row.Cells["SystemId"].Value != null) // Need to check for null if new row is exposed
{
if(row.Cells["SystemId"].Value.ToString().Equals(searchValue))
{
rowIndex = row.Index;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
LINQ答案:
int rowIndex = -1;
bool tempAllowUserToAddRows = dgv.AllowUserToAddRows;
dgv.AllowUserToAddRows = false; // Turn off or .Value below will throw null exception
DataGridViewRow row = dgv.Rows
.Cast<DataGridViewRow>()
.Where(r => r.Cells["SystemId"].Value.ToString().Equals(searchValue))
.First();
rowIndex = row.Index;
dgv.AllowUserToAddRows = tempAllowUserToAddRows;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
191688 次 |
最近记录: |