RowFilter LIKE操作

时间:2010-04-27 17:57:40

标签: c# datarowview

我知道以下内容不允许作为行过滤器

'canada%.txt'或'canada * .txt'

我想我可以将我的过滤器重写为

file_name like 'Canada%' and file_name like '%.txt' 

应该有用。

但有没有更简单的方法,而不是确定%是什么并拆分字符串?

2 个答案:

答案 0 :(得分:1)

我不相信过滤器表达式中允许使用CHARINDEX。

您可能会尝试从C#动态构建过滤器字符串(非常未经测试,但这是一种可能的语法):

//split the original string using the wildcard as the delimiter
string[] f = s.Split('%');

//use the resulting array to build the resultstring
string resultstring = 'file_name like "' + f[0] + '%" and file_name like "%' + f[1] + '"'

//view.RowFilter = resultstring;

答案 1 :(得分:0)

这是我提出的解决方案

    private string CreateRowFilter(string remoteFilePattern)
    {
        string[] pattern = remoteFilePattern.Split(new char[] { '*', '%' });
        int length = pattern.GetUpperBound(0);

        if (length == 0)
        {
            return String.Format("Name = '{0}'", pattern[0]);

        }

        StringBuilder fileter = new StringBuilder(
                 String.Format("Name LIKE '{0}*' ", pattern[0]));

        for (int segment = 1; segment < length; segment++)
        {
            fileter.Append(
                 String.Format("AND Name LIKE '*{0}*' ", pattern[segment]));
        }

        if(String.IsNullOrEmpty(pattern[length]) == false)
        {
            fileter.Append(
                 String.Format("AND Name LIKE '*{0}' ", pattern[length]));
        }

        return fileter.ToString();
    }