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的主要内容,如果未能解决你的问题,请参考以下文章