2013-10-04 4 views
0

Я отфильтровал свой BindingSource и замечаю результаты отлично в элементе управления gridview, который связан ... но когда я повторяю вручную, я не получаю ожидаемых результатов. Вот код:BindingSource Фильтр и запрос

CollectorAlertsBindingSource.Filter = "CollectorAlert_Name='" & nameCA & "'" 
    Me.CollectorAlertsTableAdapter.Fill(Me.PWDS.CollectorAlerts) 

    Dim CARows As DataRow 

    For Each CARows In PWDS.CollectorAlerts.Rows 
     txtCollectorAlertName.Text = CARows("CollectorAlert_Name").ToString 
     txtTimedInterval.Text = CARows("CollectorAlert_TriggerInterval").ToString 
    Next 

я могу сказать, когда я пошагово код, который ROWS.Count = 3. Есть в общей сложности 3 строк в таблице, но фильтр должен отфильтровали его до 1 Я уверен, что я смотрю на это совершенно неправильно, поэтому мне нужна помощь.

Что я делаю неправильно?

Спасибо!

ответ

0

Вы отфильтровали BindingSource, но тогда вы не используете его - вы вытягиваете строки непосредственно из datatable. Когда вы применяете фильтр, bs фактически фильтрует через свой собственный DataView (который является слоем, который находится поверх данных datatable). Вы можете видеть это в отладчике как свойство «syncroot» для bs.) Сама таблица все еще имеет все строки внутри него.

+0

Я не вижу никакого .DefaultView :(Не на CollectorAlerts Datatable. Когда я пытаюсь, я получаю ошибку: «rows» не является членом System.Data.Dataview –

+0

Я попытался выполнить итерацию через DefaultView, используя DataRowView, но это привело к тем же результатам. –

+0

Когда я нарушаю и смотрю на DefaultView.Count, я получаю 3 :). Должен ли я добавить туда фильтр строк? Или это лучший метод? –

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