0

我目前已将用户有权访问的组织列表设置为列表 ( List<string> userOrg)。

列表内容类似于:

34598
34599
23%

然后我使用这个列表填充一个gridview,所以gridview会给我所有的信息:

34598
34599
everything that starts with: 23

现在我想以某种方式让用户能够搜索该gridview

他们将他们想要查找的组织放入文本框中,它填充得很好,但是我如何确保只显示他们有权访问的组织?

我想我要问的是,如何搜索用户组织列表以确保有问题的组织在其中,但同时考虑通配符。

例如,如果他们搜索“345%,我只想向他们显示 34598 和 34599,而不是 34566,因为这些是用户可以访问的(在我的 userOrg 列表中)

我从这个开始,但不确定如何处理通配符:

List<string> org = new List<string>();
    List<string> userOrg = new List<string>();
    userOrg = (List<string>)Session["UserOrgs"] ;

    if (txtOrg.Text == "")
        Session["UserOrgs"] = userOrg;              
    else
    {
        foreach (string item in userOrg)
        {
            if(Regex.IsMatch(item, txtOrg.Text))
               org.Add(txtOrg.Text);
        }
        Session["UserOrgs"] = org;
    }
    ObjectDataSource1.Select();

现在,如果我在文本框中输入 23% 以搜索我可以访问且以 23 开头的所有组织,它匹配并进入 if,但是如果我在文本框中输入 2%,它不匹配O 在我的 userOrg 列表中有 23% 并且没有返回任何内容。

也许有一种方法可以使用 LINQ 更轻松地做到这一点?我以前没有做太多。

4

1 回答 1

0

一般来说,当标准字符串操作可以正常工作时,我不赞成使用正则表达式,因为我坚信后者更容易理解,因此更易于维护。在这种情况下,我很想做类似的事情:

Bool isVisible = userOrgs.Any(delegate(string x)
                              {
                                  String y = txtOrg.Text;
                                  if (y.EndsWith("%"))
                                  {
                                      return x.StartsWith(y.TrimEnd('%'));
                                  }
                                  if (x.EndsWith("%"))
                                  {
                                      return y.StartsWith(x.Trim('%'));
                                  }
                                  return x == y;
                              }

如果您喜欢正则表达式,那么您可以随意添加它们。

于 2013-03-07T17:02:39.490 回答