簡體   English   中英

DataView篩選器找不到匹配項

[英]DataView Filter not finding match

我正在根據樹視圖中的標簽值選擇一個數據視圖行。 它在大多數情況下都可以正常工作,但是在某些情況下不會返回記錄。 我在調用過濾器之前編寫了以下代碼來測試每一行。

        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() + "'";
               }
            }

每當找到匹配項時,它將運行過濾器。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM