找回密码
 立即注册

QQ登录

只需一步,快速开始

today

注册会员

6

主题

23

帖子

55

积分

注册会员

积分
55
today
注册会员   /  发表于:2021-11-1 11:24  /   查看:5959  /  回复:11
1金币
本帖最后由 Richard.Ma 于 2021-11-12 10:45 编辑

c1TrueDbGrid过滤条中如果内容包含有 %时,过滤时会出错。
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

你好,已经和研发确认,此问题不属于产品bug,由于过滤功能使用的是MSFilter,此过滤器本身就无法支持在字符串中间加入通配符,只能在前后两端,错误信息也是MSFilter报出的, 要屏蔽此错误,可以在控件的Error事件中进行屏蔽

11 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-1 11:24:26
来自 10#
你好,已经和研发确认,此问题不属于产品bug,由于过滤功能使用的是MSFilter,此过滤器本身就无法支持在字符串中间加入通配符,只能在前后两端,错误信息也是MSFilter报出的,

要屏蔽此错误,可以在控件的Error事件中进行屏蔽
  1. private void c1TrueDBGrid1_Error(object sender, C1.Win.C1TrueDBGrid.ErrorEventArgs e)
  2. {
  3.     e.Handled = true;
  4. }
复制代码
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-1 12:20:59
2#
请上传一个demo来重现问题
回复 使用道具 举报
today
注册会员   /  发表于:2021-11-1 15:10:02
3#
已上传例子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-1 16:58:07
4#
你好,确认了一下,目前控件本身的限制,%只能作为通配符出现在字符串的最前端或者最后端,没法在中间作为通配符使用,

你这边的例子中也是在中间作为通配符用了,但是你想要作为实际的%字符来用,这个暂时没有什么办法解决
回复 使用道具 举报
today
注册会员   /  发表于:2021-11-1 17:28:50
5#
我这个 % 是内容里面包含的,是不想做 通配符
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-1 18:00:42
6#
我明白你说的意思,这个算是目前产品的bug,没有去提供转义%字符串的功能,这个bug我会提交给研发在新版本修复,目前暂时没有什么好的解决方案
回复 使用道具 举报
Tachiro
高级会员   /  发表于:2021-11-3 18:31:17
7#
试试看我的代码,可以用 % 符号查询!


  1. private void c1Grid_Filter(object sender, FilterEventArgs e)
  2. {
  3.     var dataView = ((DataTable)c1Grid.DataSource).DefaultView;

  4.     if (dataView.RowFilter == e.Condition)
  5.     {
  6.         return;
  7.     }

  8.     var condition = e.Condition;

  9.     if (condition.Length != 0)
  10.     {
  11.         condition = e.Condition;

  12.         for (var i = 0; i < c1Grid.Splits[0].DisplayColumns.Count; i++)
  13.         {
  14.             if (!condition.Contains($"[{c1Grid.Columns[i].Caption}]"))
  15.             {
  16.                 continue;
  17.             }

  18.             var paramIndex = condition.IndexOf('\'', condition.IndexOf($"[{c1Grid.Columns[i].Caption}]", StringComparison.Ordinal)) + 1;
  19.             condition = condition.Insert(paramIndex, "*");
  20.         }
  21.     }

  22.     dataView.RowFilter = condition;
  23. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
today
注册会员   /  发表于:2021-11-3 18:37:42
8#
要把那个有百分号,整个复制的过滤条过滤,看会不会出错
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-4 10:05:25
9#
本帖最后由 Richard.Ma 于 2021-11-12 10:44 编辑

这个问题已经作为bug:C1WIN-26081提交给研发,有新的进展我会在帖子中反馈
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部