DataView 行过滤器表达式 C#
Posted
技术标签:
【中文标题】DataView 行过滤器表达式 C#【英文标题】:DataView Rowfilter Expression C# 【发布时间】:2016-09-01 16:24:11 【问题描述】:我有一个数据表,其中一列是特定类型的对象,比如 typeOf(A) - A 是我的自定义类。 A 类具有文本属性和其他属性,如 bool。从用户或外部代码中,我只获得要在 RowFilter 中用于过滤的文本值,在下面的示例中,我将获得“cat”作为我要使用的过滤器。使用这个如何创建 RowFilterExpression?
class A
public string Textget;set;
public bool isReadonly get;set;
DataTable table = new DataTable();
table.Columns.Add("col1", typeOf(A));
table.Rows.Add(new AText = "cat", isReadOnly = true,)
table.Rows.Add(new AText = "dog", isReadOnly = false,)
string filter = "cat";
DataView dataView = new DataView(table);
dataView.RowFilter = "[col1]='"+filter+"'";
上面的表达式不起作用,因为它试图将它与单元格中的对象匹配。如何使用此过滤器表达式单独过滤掉第一行?
感谢任何帮助。
【问题讨论】:
【参考方案1】:尝试在您的对象中覆盖 ToString
方法,然后您当前的过滤代码应该可以工作
class A
public string Textget;set;
public bool isReadonly get;set;
public override string ToString()
return this.Text;
【讨论】:
被覆盖的 ToString 在我的测试中始终存在,但它对过滤没有帮助,技巧在于 rowFilter 表达式。无论如何,谢谢。 但是您发布的代码没有覆盖ToString
方法,您也没有提到您的测试中有它
但它现在对你有用!但是,即使仅使用覆盖的 ToString
方法进行测试,它也对我有用。【参考方案2】:
像这样覆盖对象 ToString 方法:
class A
public string Text get; set;
public bool isReadonly get; set;
public override string ToString()
return this.Text;
你可以使用:
dataView.RowFilter = string.Format("Convert([col1], 'System.String') = '0'", filter);
【讨论】:
仅当您还从另一个答案中实现 ToString 方法时才有效。这会编译并执行,但实际上并没有返回任何结果。 感谢 remak,你是对的,我已经更改了我的代码。 您的更新现在显然可以工作了,但是不需要在过滤器中转换为字符串,因为这是默认完成的。 因为它只是其他人回答的副本,您不需要转换。 你可以这样做:table.CaseSensitive = false;
以上是关于DataView 行过滤器表达式 C#的主要内容,如果未能解决你的问题,请参考以下文章