2011-02-18 2 views
2

Следующий код работает (строки отфильтровываются по выражению select), но все элементы управления в datarepeater пусты. Когда установлено значение .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 

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

+0

Думаю, мне нужно сфокусироваться только на фильтрах строк набора данных. – JeffO

ответ

1

Я думаю, проблема из-за источника данных текстового поля и источника данных 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 

Надеется, что это помогает :)

1

Свойства 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 свойство, как он будет использоваться по умолчанию.

+0

Не следует ли применять набор данных, где требуется dataview, вызывать ошибку? – JeffO

+0

@Jeff O - Где вы видите, как я применяю DataSet? Когда 'checked' истинно, я использую' DataView'off таблицу в наборе. Когда 'checked' является ложным, я использую' DataTable' из 'DataSet'. IIRC, можно даже напрямую связать с DataSet. Большинство элементов управления просто вытащит первую таблицу на множестве. Однако, это не то, что я здесь делаю. – Thomas

+0

Простите, что (не смотрели на это некоторое время), я имел в виду в своем коде, но вы правы, что это не тот набор данных, который применяется. – JeffO

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