我有一个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
但如何找到最接近的匹配。我是否必须逐字逐句搜索搜索文本?
答案 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.