我正在尝试过滤具有多个列的DataView
,其中一些是数值。键入字符串时一切都很完美,但一旦输入数值(如检查信使#),它就会过滤为空。
我的守则如下:
private void tbxSearchCourier_KeyUp(object sender, KeyEventArgs e)
{
string outputInfo = "";
string[] keyWords = tbxSearchCourier.Text.Split(' ');
foreach (string word in keyWords)
{
if (outputInfo.Length == 0)
{
outputInfo = "('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word
+ "%' OR 'Email Address' LIKE '%" + word + "%')";
}
else
{
outputInfo += " AND ('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word
+ "%' OR 'Email Address' LIKE '%" + word + "%')";
}
}
CourierDV.RowFilter = outputInfo;
}
我在网上搜索解决方案但找不到有效的方法。为什么会发生这种情况?我该如何解决?
答案 0 :(得分:6)
请考虑以下注意事项:
您已将列名放在''
之间,这使其成为字符串文字。
如果列名是复杂名称,请在列名周围使用[]
。
要将integer
列与LIKE
运算符进行比较,您应首先将其转换为string
,因为LIKE
是string
运算符。< / p>
另外,请确保您的列名称为Courier #
,且不是标题/标题文字。
示例强>
dataView.RowFilter = "Convert([Some Column], System.String) LIKE '12%'";
更多信息
要详细了解过滤器支持的语法,请查看DataColumn.Expression
。