C# DataGridView.DefaultView.RowFilter 与 charlist

Posted

技术标签:

【中文标题】C# DataGridView.DefaultView.RowFilter 与 charlist【英文标题】:C# DataGridView.DefaultView.RowFilter with charlist 【发布时间】:2017-08-22 18:58:24 【问题描述】:

我想用类似 sql 语句的 [charlist] 过滤我的数据网格。

假设我在 PlantName 中搜索“çiçek”。我的 sql 选择就像;

SELECT * FROM Plants WHERE PlantName LIKE %[cç][ıi][cç]ek%

这又回来了;

çiçek
cicek
cıcek
çıçek
etc....

如何为 DataGridView.DefaultView.RowFilter 执行此操作?

【问题讨论】:

DataGridView filter ignoring diacritics (accents) on cells, words的可能重复 兄弟您好,感谢您的快速回复。我试过这个***.com/a/249126/5700467 [ıi] 没问题,但我还有 5 个字母。它们是 [cç]、[gğ]、[oö]、[sş]、[uü] 不适用于这些字母。 【参考方案1】:

我找到了办法;

首先你必须创建一个搜索索引。例如,我们有一个 Plants 表,它有一个 PlantName 字段。只需填充 PlantName 的新字段,并对棘手的字母应用替换操作。

数据库端;

Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(PlantName,'ç','C'),' Ç','C'),'i','I'),'ı','I'),'İ','I'),'ğ','G'),'Ğ','G '),'ö','O'),'Ö','O'),'ş','S'),'Ş','S'),'ü','U'),'Ü ','U'),'-',' ') AS SEARCH_INDEX

C#端;

private string mReplace(string txt)
    
        string sonuc;
        if (txt == null)  return ""; 
        txt = txt.Replace(" ", " ");
        txt = txt.Replace("-", " ");
        txt = txt.Replace("ç", "C");
        txt = txt.Replace("Ç", "C");
        txt = txt.Replace("ı", "I");
        txt = txt.Replace("i", "I");
        txt = txt.Replace("İ", "I");
        txt = txt.Replace("ğ", "G");
        txt = txt.Replace("Ğ", "G");
        txt = txt.Replace("ö", "O");
        txt = txt.Replace("Ö", "O");
        txt = txt.Replace("ş", "S");
        txt = txt.Replace("Ş", "S");
        txt = txt.Replace("ü", "U");
        txt = txt.Replace("Ü", "U");
        sonuc = txt.ToUpper();
        return sonuc;
    

在您的搜索行使用此功能,例如;

DataTable1.DefaultView.RowFilter = "SEARCH_INDEX LIKE '*" + mReplace(txtPlantName.Text) + "*'";

http://mehmetgoldenhead.blogspot.com.tr/2017/05/ms-acces-icin-turkce-karakter-replace.html

【讨论】:

以上是关于C# DataGridView.DefaultView.RowFilter 与 charlist的主要内容,如果未能解决你的问题,请参考以下文章

C#进阶C# 泛型

C#进阶C# 匿名方法

C#进阶C# 多线程

C# 教程

[C#教程01]C# 简介

用 C# 编写 C# 编译器,先有鸡还是先有蛋?