【问题标题】:Is there any way to filter C# DataView like this?有没有办法像这样过滤 C# DataView?
【发布时间】:2020-04-09 18:28:31
【问题描述】:

我正在编写一些代码,用于在 c# 中过滤 BindingSource 中的数据。

DataTable,我有一列,数据是这样的,

编码很好

我想像我的示例一样,在每个空格之后过滤字符串中的数据,

var ss = "coding is      ery"; 
var s = ss.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

var filter = ColumnName + " like \'%" + s[0] + "%\' ";

        for (int i = 1; i < s.Length; i++)
        {
            filter = filter +  "AND " + ColumnName + " like \'%" + s[i] + "%\' ";
        }

BindingSource.Filter = filter;

这里的问题是我会得到所有的数据(编码很好)。当单词不是以正确的字母开头时,我不想获取数据。例如,

编码很简单。

我想成为这样的人

“编码非常是”或“非常编码”。

我想要正确的起始字母,但单词的位置并不重要。

有人知道怎么做吗?

【问题讨论】:

  • 所以您要求有一个过滤器来检查所有完整的单词但不关心所有这些单词的位置?所以“正在编码 ery”不应该正常工作吗?
  • 你是对的,“正在编码 ery”应该不起作用。但不是完整的单词(只有单词的开头字母),“is coding ve”也应该起作用。

标签: c# winforms datatable dataview bindingsource


【解决方案1】:

你需要这样检查:

var filter = "(" + columnName
    + " like \'" + s[0] + "%\' "          // first word
    + " OR like \'% " + s[0] + "%\' )";   //in a sentence

for (int i = 1; i < s.Length; i++)
{
    filter += "AND " + "(" + columnName
    + " like \'" + s[i] + "%\' "          // first word
    + " OR like \'% " + s[i] + "%\' )";   //in a sentence
}

【讨论】:

  • 这是有效的(带有语法更正),但适用于完整的单词。我想用正确的单词开头字母进行过滤:'s[i] %'。我展示的示例是使用字符串包含
  • 我更新了代码:'s[i]%' 单词开头在句子的开头或 '%s[i]%' 单词开头在句子中的任何位置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2016-09-19
  • 2020-05-16
  • 2021-05-18
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多