DataView Rowfilter Expression C#

时间:2016-05-06 14:31:09

标签: c# dataview rowfilter

我有一个dataTable,其中一列是特定类型的对象,比如typeOf(A) - A是我的自定义类。 A类具有文本属性和bool等其他属性。从用户或外部代码我只得到RowFilter中用于过滤的文本值,在下面的例子中我将得到" cat"作为我的过滤器使用。使用这个如何创建RowFilterExpression?

class A
{
   public string Text{get;set;}
   public bool isReadonly {get;set;}
} 

DataTable table = new DataTable();
table.Columns.Add("col1", typeOf(A));
table.Rows.Add(new A{Text = "cat", isReadOnly = true,})
table.Rows.Add(new A{Text = "dog", isReadOnly = false,})

string filter = "cat";

DataView dataView = new DataView(table);
dataView.RowFilter = "[col1]='"+filter+"'";

上面的表达式不起作用,因为它试图将它与单元格中的对象匹配。如何使用此过滤器表达式单独过滤掉第1行?

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试在您的对象中覆盖ToString方法,然后您当前的过滤代码应该正常工作

class A
{
   public string Text{get;set;}
   public bool isReadonly {get;set;}

   public override string ToString()
   {
      return this.Text;
   }
} 

答案 1 :(得分:-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);