-2

我有一个 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

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

4

1 回答 1

0

尝试更严格地定义“最近”可能会让您更接近答案。例如,如果它们都是数字,您可能会说 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。

于 2013-08-10T00:55:33.207 回答