如何检查Datatable值是否包含字符串输入的一部分?

时间:2016-12-15 20:17:17

标签: c#

我想检查数据表条目是否包含用户输入字符串的一部分

E.g。在数据表中,如果有123456,如果用户输入1234,我应该得到一个匹配并获得该行中的值。

现在,如果存在完全匹配,我可以获取行中的值,

我的检查代码是:

string findPO = string.Format("PO = {0}",tbPOnum.Text);   

DataRow[] selectRow = localDataTable.Select(findPO);

localDataTable.Rows.IndexOf(selectRow[0]);

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

它应该与LIKE表达式一起使用

string findPO = string.Format("Convert (PO,System.String) LIKE '*{0}*'",tbPOnum.Text);   

DataRow[] selectRow = localDataTable.Select(findPO);

这应该返回包含值的所有行。

有关可以与Select方法一起使用的表达式的详细信息,请参阅有关DataColumn.Expression

的信息
  

在LIKE比较中,*和%可以互换地用于通配符。如果LIKE子句中的字符串包含*或%,则这些字符应括在括号([])中。如果括号在子句中,则每个括号字符应括在括号中(例如[[]或[]])。允许在模式的开始和结束处,或在模式的结尾处或在模式的开始处使用通配符。

     

字符串中间不允许使用通配符。例如,不允许使用'te * xt'。

答案 1 :(得分:1)

@Jehof - 您提供的答案是正确的(使用LIKE过滤器声明)

我试图搜索的字段是一个int字段, 经过一些研究后,我得到了以下代码:

string findPO = string.Format("convert(PO, 'System.String') LIKE '%{0}%'", tbPOnum.Text);

答案 2 :(得分:0)

只循环行然后是列(反之亦然)并检查单元格的任何值,.IndexOf(findPO) == 0。这意味着单元格的值以给定的字符串开头。你也可以使用linq。如果您需要代码示例,请分享。