DataGridView筛选忽略单元格上的变音符号(重音符号) [英] DataGridView filter ignoring diacritics (accents) on cells, words
问题描述
我使用 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屋!
SELECT Column1,Column1 COLLATE SQL_Latin1_General_CP1253_CI_AI AS Column1_UnAccented
FROM Table1
然后,使用不重复的列值进行过滤:
bindingSource1.Filter = String。格式(Column1_UnAccented LIKE'* {0} *',textBox1.Text)
$ 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
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
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
SELECT Column1, Column1 COLLATE SQL_Latin1_General_CP1253_CI_AI AS Column1_UnAccented
FROM Table1
bindingSource1.Filter = String.Format("Column1_UnAccented LIKE '*{0}*'", textBox1.Text)
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