2013-05-31 6 views
1

В MSSQL я могу фильтровать запрос на номер телефона, как это:VB.NET BindingSource фильтр для DataGridView

where replace(phone,'-','') Like '%480555%' 

Я пытаюсь выяснить, как сделать это на Datasource. Нормальный запрос выглядит следующим образом:

Dim stringFilter As String = String.Empty 
String.Format("phone Like '%480555%'") 
ViewCustomersBindingSource.Filter = stringFilter 

Однако это не найти никаких результатов, потому что источник данных имеет значения, с дефисом в нем. REPLACE не является допустимым аргументом для фильтрации.

Моя первоначальная мысль состояла в том, чтобы обновить MSSQL View, чтобы разделить дефисы. Однако для отображения я хотел бы отображать дефисы. Я не могу предположить, что все они будут выглядеть так же, как некоторые номера телефонов могут отличаться от США.

Есть ли другой способ отфильтровать по номеру телефона и игнорировать дефисы?

ответ

0

Я не думаю, что вы можете прямо установить фильтр, который игнорирует дефисы (как в вашем первом запросе) на вашем binding source. В столбце выражения фильтра нет строковых операций. Из этого http://msdn.microsoft.com/fr-fr/library/system.windows.forms.bindingsource.filter.aspx разрешена только операция с строкой: +.

Но вы можете сохранить и отобразить исходный столбец, содержащий дефисы, и добавить еще один столбец (без дефиса), который вы не видите, но который вы используете только для фильтрации.

С MSSQL, вы можете, например, добавить computed column, которая использует функцию REPLACE.

Вот Somes ссылки, которые могут помочь вам создать вычисляемый столбец:

Надежда это поможет.

+0

Отличная идея. Я добавил это к моему мнению и вуаля. Спасибо за толчок. 'code'select id, фирменное имя, телефон, заменить (телефон, '-', '') в качестве телефонов от клиентов – CRAIGRY

+0

Рад, что я мог помочь. Я сначала думал о столбце выражения в datatable, но это невозможно из-за ограничений выражения фильтра. И с удовольствием узнаем о функции MSSQL Replace ;-) – Chris

Смежные вопросы