Ну тогда ...
Ваш вопрос довольно разрозненный, и я не могу понять всего этого - может быть, поэтому вы до сих пор не получили ответа. Пропуск пустых полей - это просто вопрос добавления нового условия в filterFunc1 - if Convert.IsDBNull(item) then continue for
(при условии, конечно, item
- это поле в DataRow).
Однако этот стиль программирования довольно туманный, и я бы рекомендовал, по крайней мере, более четко определить, какие столбцы вы фильтруете, и типы объектов в столбцах. Гораздо лучшим подходом было бы сопоставить данные, которые вы получаете из базы данных, с реальными объектами в вашем приложении - это позволяет более безопасно программировать. Я думаю, что главная проблема здесь в том, что никто не может действительно сказать, что там происходит, из нескольких строк кода, потому что никто не может делать какие-либо предположения о том, какие там объекты.
Об элементах в ComboBox, Понятия не имею, с какими трудностями вы столкнулись, возможно, вы захотите немного прояснить это.
вместо простых строк можно поддерживать структуры, содержащие как заголовки, так и идентификаторы, например, скажем
public class YourComboItem
public property Id as string [get/set]
public property Title as string [get/set]
end class
Затем свяжите ItemsSource вашего ComboBox с коллекцией этих элементов, извлеченных из базы данных, и установите DisplayMemberPath на Title
и ValueMemberPath на Id
. Затем вы можете использовать SelectedValue ComboBox, чтобы получить выбранный идентификатор. Как видите, наличие объектов вместо необработанных структур данных может иметь довольно много преимуществ.
Конечно, я описал получение SelectedValue напрямую из ComboBox, в то время как гораздо лучшая архитектура была бы MVVM, с ViewModel, содержащей ObservableCollection(Of YourComboItem)
, и ItemSource ComboBox, привязанного к нему с фактической привязкой. Затем вы также можете привязать SelectedItem к свойству в вашей ViewModel и иметь элемент в целом, включая Id и Title, для работы, ничего не зная о вашем пользовательском интерфейсе. В качестве альтернативы вы можете создать ICollectionView из коллекции элементов и связать с ним ItemsSource, тогда у вас будет выбранный элемент в свойстве CurrentItem объекта ICollectionView.
Я бы порекомендовал почитать MVVM (Model-View-ViewModel), чтобы значительно упростить вашу работу с WPF.