【问题标题】:Loop through DataGridView records and stop at the nearest match to my search criteria循环遍历 DataGridView 记录并在与我的搜索条件最接近的匹配处停止
【发布时间】:2013-08-09 22:32:43
【问题描述】:

我有一个 DataGridView 的所有文本值。用户在文本框中键入一些文本(txtsearch)并单击按钮(btnSearch)。我想遍历列的值并在与 txtSearch 中的文本最匹配/最接近的匹配处停止。

例子:

PartNum         Desc

PN10  
PN10-1     
PN10-13   
PN12    
PN12-1  
PN12-2       
PN12-3         
PN13-1          
PN15-2       
PN19-1       

当用户在搜索文本框中键入 pn12 时,我希望循环遍历有序列并在第一个匹配项处停止,但如果用户搜索不在列表中的内容,例如 pn14-1,则在最接近的匹配项处停止“PN15- 2"

我知道如何遍历行并找到完全匹配

For Each row As DataGridViewRow In Me.DGEntries.Rows 
    if row.Cells.Item("PartNum").Value = txtsearch.text then  
      exit for

但是如何找到最接近的匹配项。我必须逐个字母地循环搜索文本吗??

【问题讨论】:

    标签: vb.net search datagridview


    【解决方案1】:

    尝试更严格地定义“最近”可能会让您更接近答案。例如,如果它们都是数字,你可能会说 9996 比 9990 更接近 9998。一旦你清楚地了解了 更接近 的含义,你就可以计算每个值的距离列中的项目。然后很容易找到最近的。即使用我的示例 9998 给出的距离为 2,而 9990 给出的距离为 6。

    根据评论编辑:

    我知道它是字符串,这就是为什么我说“如果是的话”。但是您也应该能够推断出我对字符串的回答。您需要将字符串编码为数字,以捕捉排名和位置顺序的概念 - 以便 AA 和 AD 之间的距离小于 AA 和 DA 之间的距离(参见 11 和 14 与 11 和 41)。例如,使用 Base-26 AD 将是 1 x 26 + 4 = 30。CA 将是 3 x 26 + 1 = 79。因此 AD 和 CA 之间的距离为 49。

    【讨论】:

    • 它不是数字,而是所有类似数字的字符串。我的意思是最接近的匹配。例如:PN14-2 比 PN19-1 更接近 PN15-2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多