循环访问DataGridView记录并停在与我的搜索条件最接近的匹配位置

时间:2013-08-09 22:32:44

标签: vb.net search datagridview

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

但如何找到最接近的匹配。我是否必须逐字逐句搜索搜索文本?

1 个答案:

答案 0 :(得分:0)

尝试更严格地定义'最近'可能会让你更接近答案。例如,如果它们都是数字,你可能会说9996比9998“更接近”而不是9990.一旦你清楚地知道更近你的意思,你可以计算每个的距离列中的项目。然后很容易找到最近的。即使用我的例子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.