C# DataView筛选器未找到匹配项
我正在根据树视图中的标记值选择DataView行。它在大多数情况下工作正常,但在某些条件下不会返回记录。在调用过滤器之前,我编写了下面的代码来测试每一行C# DataView筛选器未找到匹配项,c#,filter,dataview,C#,Filter,Dataview,我正在根据树视图中的标记值选择DataView行。它在大多数情况下工作正常,但在某些条件下不会返回记录。在调用过滤器之前,我编写了下面的代码来测试每一行 private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (treeView1.SelectedNode != null) { TreeNode tn = tree
private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode != null)
{
TreeNode tn = treeView1.SelectedNode;
Console.WriteLine(tn.Tag.ToString());
selectedTag = tn.Tag.ToString();
dv.Table = ds.Tables["ProductStruct"];
foreach (DataRow dr in dv.Table.Rows)
{
bool test = dr["uniqueID"].ToString() == tn.Tag.ToString();
Console.WriteLine(dr["uniqueID"].ToString() + " and " + tn.Tag.ToString() + test);
}
dv.RowFilter = "uniqueID = '" + tn.Tag.ToString() + "'";
Console.WriteLine(dv.RowFilter.ToString());
Console.WriteLine(dv.Count.ToString());
}
}
结果如下:
12331233-200-00e
12331233 and 12331233-200-00eFalse
12331233-100-000 and 12331233-200-00eFalse
12331233-200-00e and 12331233-200-00eTrue
12331233-300-000 and 12331233-200-00eFalse
12331233-400-000 and 12331233-200-00eFalse
12331233-500-000 and 12331233-200-00eFalse
12331233-600-000 and 12331233-200-00eFalse
12331233-700-000 and 12331233-200-00eFalse
12331233-800-000 and 12331233-200-00eFalse
12331233-900-000 and 12331233-200-00eFalse
uniqueID = '12331233-200-00e'
0
正如您所看到的,bool测试对一条记录是真的,但是过滤器无法返回它。非常感谢您的帮助,我不喜欢使用一行就可以完成的循环…您运行的循环会覆盖布尔值,循环次数与表中存在的行数相同 在循环内部,找到匹配项后使用return进行转义。它不会穿过所有的行。这将只返回1个值
foreach (DataRow dr in dv.Table.Rows)
{
bool test = dr["uniqueID"].ToString() == tn.Tag.ToString();
if(dr["uniqueID"].ToString() == tn.Tag.ToString()){
Console.WriteLine(dr["uniqueID"].ToString() + " and " + tn.Tag.ToString() + test);
dv.RowFilter = "uniqueID = '" + tn.Tag.ToString() + "'";
return;
}
}
如果需要更多匹配项,请移动
dv.RowFilter = "uniqueID = '" + tn.Tag.ToString() + "'";
在循环内部,并用if语句封装它
foreach (DataRow dr in dv.Table.Rows)
{
bool test = dr["uniqueID"].ToString() == tn.Tag.ToString();
Console.WriteLine(dr["uniqueID"].ToString() + " and " + tn.Tag.ToString() + test);
if(dr["uniqueID"].ToString() == tn.Tag.ToString()){
dv.RowFilter = "uniqueID = '" + tn.Tag.ToString() + "'";
}
}
这将在每次找到匹配项时运行筛选器
我希望这会有所帮助。我希望过滤器选择单个记录,但它不是。bool“test”只是为了向自己证明,filter需要获取一个记录……只要添加return,一旦找到需要的内容,就可以退出循环。