如何使用一个TextBox筛选两列-在DataGridView中筛选两列会降低性能-Visual Basic

时间:2018-08-07 07:37:16

标签: c# .net vb.net

我在Datagridview中有2列:

  1. 英语单词
  2. 阿拉伯语含义

我只想使用一个文本框来搜索英语和阿拉伯语,但这会降低性能:

Me.TbBindingSource.Filter = "English like '" + TextBox1.Text + "%' Or Arabic like '" + TextBox1.Text + "%'"

我的新方法是检查一个文本中是否有阿拉伯字符。如果有,查询将仅搜索阿拉伯语含义列。否则,它将搜索英文单词:

Dim x As Char = "و"
    If TextBox1.Text.Contains(x) Then
        TbBindingSource.Filter = "Arabic like '" + TextBox1.Text + "%'"
    Else
        TbBindingSource.Filter = "English like '" + TextBox1.Text + "%'"
    End If

我只知道如何检查一个阿拉伯字符,但是我需要全部检查。

PS:我是Visual Basic的新手,并且了解C#,所以如果您能给我任何一个提示,那就太好了。

1 个答案:

答案 0 :(得分:0)

“ LIKE”是一个功能强大的关键字,但是它会大大降低SQL的速度。使用前,应尽可能缩小搜索范围。

您的问题似乎听起来很简单,但更像一堆问题,很快就会变得复杂。

仍然,这里有一些代码可以帮助您猜测一个单词是阿拉伯语还是英语。希望对您有所帮助:

Public Function IsThisArabic(ByVal word As String) As Boolean
    For Each car As Char In word.ToCharArray
        If AscW(car) > 600 Then
            Return True
        End If
    Next
    Return False
End Function

如果您觉得少用几个字符就足够了,那就适合自己。该函数查看单词的每个字符,如果至少有一个阿拉伯字母ascii字符(然后停止查找),则返回True。

接下来了解您的目标受众:您有简短的词典还是庞大的词典?您会经常检查相同的单词还是总是新单词?

如果只有一小段词典,您可能只想抓住所有词典而不是执行许多查询,然后从您自己的内存中进行操作。如果您有理由认为您会多次查找相同的单词,则应建立缓存。