.net DataGridView过滤器忽略单元格、单词上的变音符号(重音)

.net DataGridView过滤器忽略单元格、单词上的变音符号(重音),.net,vb.net,winforms,datagridview,filter,.net,Vb.net,Winforms,Datagridview,Filter,我在DataGridView中使用TextBox进行过滤。这是完美的工作。 表格的单元格包含拉丁语1250个字符。 我想搜索单元格中单词的重音。 实例 如果是文本框knjazevacka,则搜索结果包含knjaževačka 对不起,英语不好。 这是导入表的代码: Dim blah As New System.Net.WebClient blah.Encoding = System.Text.Encoding.UTF8 Dim str As String = blah.DownloadStrin

我在DataGridView中使用TextBox进行过滤。这是完美的工作。 表格的单元格包含拉丁语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 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
选择1 还从数据库中选择未记录的数据并在过滤器中使用

如果可以更改select data的查询,那么在从SQL Server选择数据时,也可以选择未注释的列值,然后根据这些值筛选数据

例如,将“更改查询”设置为包含未注释的值:

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)
选择2 使用C将数据设为非注释数据,并将其放入新的a列中,然后在过滤器中使用

如果无法更改select查询,则可以向数据表中添加一个新列,并使用下面共享的方法将未记录的数据放入其中,然后根据新列进行筛选:

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
如果要使用筛选器或DataTable.DefaultView.RowFilter属性,可以使用的一种方法是将每个具有变音符号的列转换为字符串,以删除它们

例如:

var searchText=removediacriticthis.textBox1.Text; var表=新数据表; 表.Columns.AddZgrada,字符串类型; //样本数据 表.行.AddKnjaževačka 105; 表.行.AddKnjaževačka 147 ulaz II; 表.行.AddKnjaževačka 147 ulaz III; 表.行.AddKnjaževačka 152; 表.行.AddKnjaževačka 154; 表.行.AddKnjaževačka 158/II; //添加等效的转换列 table.Columns.AddZGrada,字符串类型; 表中的foreach DataRow行。行 row.setfieldzgrada已标准化,删除了iacriticsrow.FieldZgrada; table.DefaultView.RowFilter=string.Format[ZgradaNormalized]如“{0}%”,searchText; 使用此方法删除从中提取的变音符号

静态字符串RemoveDiacriticsstring文本 { 返回字符串.Concat text.normalizationForm.FormD .Wherech=>CharUnicodeInfo.getunicodecegorych= 单十进位标 .normalizationform.FormC; }
他的数据表似乎来自DownloadString调用。我知道这个删除发音符号的解决方案。但这对我来说不是一个好的解决方案。哪一个不适合你?您可以使用上述任一选项:第一个选项在您可以更改查询时适用,另一个选项在您无法更改查询时适用。我不完全理解选项1。我使用DownloadString和ConvertHTMLTablesToDataSet在datageradview中导入数据。添加包含未注释数据的新列对我来说是个问题。当您有权访问提供数据的select查询时,选项1是合适的。在您使用ConvertHTMLTablesToDataSet的情况下,选项2似乎适合您。