Фильтр по набору данных очищает все связанные элементы управления - PullRequest
2 голосов
/ 18 февраля 2011

Следующий код работает (строки фильтруются выражением select), но тогда все элементы управления в датере данных пусты. Если установлено значение .DefaultView, все записи возвращаются, и все элементы управления имеют свои значения.

       Private Sub CheckBox_FilterApplied_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox_FilterApplied.CheckedChanged
    If CheckBox_FilterApplied.Checked Then
        ' RichTextBox_Notes.DataBindings.Add("Text", dsTransactions.Tables("TransactionHeader"), "Note")
        DataRepeater_Transactions.DataSource = dsTransactions.Tables("TransactionHeader").Select("Applied = 0")

        DataRepeater_Transactions.Refresh()
    Else
        DataRepeater_Transactions.DataSource = dsTransactions.Tables("TransactionHeader").DefaultView

    End If
End Sub

Не могу сказать, чего не хватает. Обновить не поможет.

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Свойство DefaultView имеет тип DataView, чей IEnumerable перечисляет массив DataRowView, что позволяет использовать стандартный синтаксис привязки. Однако метод Select возвращает массив объектов DataRow, которые не могут быть связаны таким же образом. Самое простое решение - убедиться, что вы передаете DataView свойству DataSource.

If CheckBox_FilterApplied.Checked Then
    Dim dt As DataTable = dsTransactions.Tables("TransactionHeader")
    Dim dv As DataView = New DataView(dt, "Applied = 0", "", DataViewRowState.CurrentRows)
    DataRepeater_Transactions.DataSource = dv

Else
    DataRepeater_Transactions.DataSource = dsTransactions.Tables("TransactionHeader")

End If

Также обратите внимание, что он может привязываться непосредственно к DataTable и не требует явного использования свойства DefaultView, так как оно будет использоваться по умолчанию.

1 голос
/ 22 марта 2011

Я думаю, что проблема из-за источника данных Textbox и источника данных DataRepeater.

Я немного изменил код, пожалуйста, попробуйте. У меня работает.

Dim dt As New DataTable
dt.Columns.Add("Col1")
dt.Columns.Add("Col2")
dt.Columns.Add("Col3")


For index = 1 To 10
    Dim dr As DataRow = dt.NewRow()
    dr("Col1") = index.ToString()
    dr("Col2") = index.ToString()
    dr("Col3") = index.ToString()
    dt.Rows.Add(dr)
Next

Dim dv As DataView = New DataView(dt, "Col1 >= 8", "", DataViewRowState.CurrentRows)

TextBox1.DataBindings.Add(New Binding("Text", dv, "Col3"))
DataRepeater1.DataSource = dv

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...