RowFilter In и Not In List‹String› не возвращает строки C#

В моем коде я включаю 2 флажка, которые фильтруют информацию о продукте в таблице, независимо от того, заказан он или нет. Заказанные продукты хранятся в списке. Код, который я использую, показан ниже: -

// productsOnOrder is updated at the beginning of this method based off data stored on a MySQL database.
if (chkShowOrdered.CheckState == CheckState.Checked)
{
    tempTable.DefaultView.RowFilter = String.Format("StockNo IN ({0})", String.Join(",", productsOnOrder));
    tempTable = tempTable.DefaultView.ToTable();
}
else if (chkNotOrdered.CheckState == CheckState.Checked)
{
    tempTable.DefaultView.RowFilter = String.Format("StockNo NOT IN ({0})", String.Join(",", productsOnOrder));
    tempTable = tempTable.DefaultView.ToTable();
}

Проблема в том, что даже несмотря на то, что в заказе есть продукты, таблица всегда пуста, когда вы пытаетесь их отфильтровать. А также все товары появляются при попытке отфильтровать по не заказанным. Я преобразовал значения в таблице и в списке в верхний регистр, чтобы убедиться, что значения имеют один и тот же формат.

Почему RowFilter не дает желаемых результатов?


person Chris Graves    schedule 13.07.2017    source источник
comment
Является ли productsOnOrder набором значений string?   -  person Corak    schedule 13.07.2017
comment
Да, это все строковые значения, хранящиеся в списке‹String›   -  person Chris Graves    schedule 13.07.2017
comment
Вы уверены, что вам нужно использовать StockNo? Может быть, это должно быть что-то вроде ProductNo? Во-вторых, вы переопределяете tempTable, поэтому это будет совершенно новый объект, и привязка данных к старому объекту не будет работать. Если значения являются строками, а не числами, вам нужно их экранировать (поместить в кавычки)   -  person Pablo notPicasso    schedule 13.07.2017
comment
Тогда вам, вероятно, нужно сообщить это оператору SQL. Что-то вроде: String.Format("StockNo IN ('{0}')", String.Join("','", productsOnOrder)) -- т.е. поместите ' вокруг значений. -- и надеюсь, что вы не станете жертвой SQL-инъекций...   -  person Corak    schedule 13.07.2017
comment
Вам не нужна эта строка кода tempTable = tempTable.DefaultView.ToTable();. Применение RowFilter должно фильтровать строки в таблице.   -  person oGJo    schedule 13.07.2017
comment
@Corak Сработало, спасибо.   -  person Chris Graves    schedule 13.07.2017


Ответы (1)


Как заявил @Corak, причина, по которой он не работал, заключалась в том, что значения не были заключены в одинарные кавычки. Используя предоставленный им код, проблема была решена.

person Chris Graves    schedule 13.07.2017