DataGridView筛选忽略单元格上的变音符号(重音符号) [英] DataGridView filter ignoring diacritics (accents) on cells, words

查看:222
本文介绍了DataGridView筛选忽略单元格上的变音符号(重音符号)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 TextBox 来过滤 DataGridView image 。这是完美的工作。
表中的单元格包含拉丁文1250个字符。
我想要搜索忽略单元格中单词的重音符号。
例子。
如果是文本框knjazevacka,搜索结果包含knjaževačka
抱歉英语。
这是导入表的代码:

  Dim blah As New System.Net.WebClient 
blah。 Encoding = System.Text.Encoding.UTF8
Dim str As String = blah.DownloadString(urlfiberlTextBox.Text)
Dim Data As DataSet = ConvertHTMLTablesToDataSet(str)
对于结果中的每个数据。表格
FiberList.DataSource =数据
下一个

这是搜索:

  Dim bs As New BindingSource()
bs.DataSource = FiberList.DataSource
bs.Filter = String.Format([Column1] LIKE'* {0} *'OR [Column1] LIKE'* {0} *'OR [Column3] LIKE'* {0} *',FiberSearchTextBox.Text)
FiberList.DataSource = bs


解决方案

选项1















$ b <如果您可以更改选择数据的查询,则可以选择从SQL中选择数据服务器,你也可以选择不存在的列值,然后根据它们过滤数据。



例如,设置更改您的查询包含不重复的值:

  SELECT Column1,Column1 COLLATE SQL_Latin1_General_CP1253_CI_AI AS Column1_UnAccented 
FROM Table1



然后,使用不重复的列值进行过滤:

  bindingSource1.Filter = String。格式(Column1_UnAccented LIKE'* {0} *',textBox1.Text)



选项2



使用C#将数据放置在一个新的列中,并在过滤器中使用
$ b

如果您无法更改选择查询,则可以将新列添加到数据表中,并使用下面的方法将不重复的数据放入其中:共享,然后根据新列过滤:

  公共功能(String)
Dim normalizedString = text.Normalize(System.Text.NormalizationForm.FormD)
Dim stringBuilder = New System.Text.StringBuilder()
For Each c in normalizedString
Dim unicodeCategory = Globalization.CharUnicodeInfo.GetUnicodeCategory(c)
If(unicodeCategory<> Globalize.UnicodeCategory.NonSpacingMark)Then
stringBuilder.Append(c)
End If
Next
返回stringBuilder.ToString()。Normalize(System.Text.NormalizationForm.FormC)
End Function


I use TextBox for filtering in DataGridView image. This is work perfect. Cells of the table contained latin 1250 characters. I want to make search for ignores accents on words in cells. Example. If is textbox "knjazevacka", search results contain "knjaževačka" Sorry for bad english. This is code for import table:

Dim blah As New System.Net.WebClient
blah.Encoding = System.Text.Encoding.UTF8
Dim str As String = blah.DownloadString(urlfiberlTextBox.Text)
Dim Results As DataSet = ConvertHTMLTablesToDataSet(str)
For Each Data As DataTable In Results.Tables
    FiberList.DataSource = Data
Next

This is for search:

Dim bs As New BindingSource()
bs.DataSource = FiberList.DataSource
bs.Filter = String.Format("[Column1] LIKE '*{0}*' OR [Column1] LIKE '*{0}*' OR [Column3] LIKE '*{0}*'", FiberSearchTextBox.Text)
FiberList.DataSource = bs

解决方案

Option 1

Select also Unaccented data from database and use in filter

If you can change the query of select data, as an option, when selecting data from SQL Server, you can also select unaccented column values and then filter data based on them.

For example, set change your query to contain unaccented values:

SELECT Column1, Column1 COLLATE SQL_Latin1_General_CP1253_CI_AI AS Column1_UnAccented 
FROM Table1

Then, perform filtering using unaccented column values:

bindingSource1.Filter = String.Format("Column1_UnAccented LIKE '*{0}*'", textBox1.Text)

Option 2

Make data unaccented using C# and put them in new a column and use in filter

If you can't change the select query, You can add a new column to the data table and put unaccented data in it using using below method that Blair Conrad shared, and then filter based on new column:

Public Function RemoveDiacritics(text) As String
    Dim normalizedString = text.Normalize(System.Text.NormalizationForm.FormD)
    Dim stringBuilder = New System.Text.StringBuilder()
    For Each c In normalizedString
        Dim unicodeCategory = Globalization.CharUnicodeInfo.GetUnicodeCategory(c)
        If (unicodeCategory <> Globalization.UnicodeCategory.NonSpacingMark) Then
            stringBuilder.Append(c)
        End If
    Next
    Return stringBuilder.ToString().Normalize(System.Text.NormalizationForm.FormC)
End Function

这篇关于DataGridView筛选忽略单元格上的变音符号(重音符号)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆