2016-05-06 4 views
0

У меня есть dataTable, в котором один из столбцов имеет определенный тип объекта say typeOf (A) - A, являющийся моим пользовательским классом. Класс A имеет свойство text и другие свойства, такие как bool. Из пользовательского или внешнего кода я получаю только текстовое значение, которое будет использоваться в RowFilter for Filtering, в приведенном ниже примере я получу «cat» в качестве используемого фильтра. Используя это, как создать RowFilterExpression?DataView Rowfilter Expression C#

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+"'"; 

Вышеприведенное выражение не работает, потому что оно пытается сопоставить его с объектом в ячейке. как отфильтровать только одну строку, используя это выражение фильтра?

Любая помощь приветствуется.

ответ

-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); 
+0

Я проверяю его код, он отлично работает –

+0

Он работает, только если вы также реализуете метод ToString из другого ответа. Это компилируется и выполняется, но на самом деле не возвращает никаких результатов. – CathalMF

+0

Спасибо за remak, вы правы, я изменил свой код. –

2

Попробуйте первостепенную ToString метод в объекте, а затем ваш текущий код фильтрации должен работать

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

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

Это работает на моих тестах. – CathalMF

+0

Переопределенная ToString всегда была в моих тестах, но она никогда не помогала в фильтрации, трюк был в выражении rowFilter. В любом случае спасибо. – SandhraPrakash

+0

Но код, который вы опубликовали, не имеет переопределенного метода 'ToString', вы не упомянули, что у вас есть это в ваших тестах. –