在DataGrid中过滤数据

时间:2017-03-07 13:22:51

标签: mysql wpf vb.net datagrid

如何过滤我的某个数据网格中的数据,例如:

我有一个mysql类:

Private Function fillGrids()
    gornjiGrid.ItemsSource = mysql.getArtikli().DefaultView
    gornjiGrid.Items.Refresh()
End Function

这是来自mainwindow.vb的函数

Private Sub textBox1_Copy1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles textBox1_Copy1.TextChanged
    'mysql.getArtikli().DefaultView.RowFilter = " name like '*" & textBox1_Copy1.Text & "*'"
End Sub

我想在以下文本框中使用textchanged事件过滤名为“gornjiGrid”的网格中的返回行:

<DataGrid ItemsSource="{Binding gornjiGrid}" x:Name="gornjiGrid"  Margin="376,141,15,0" FontSize="12" Height="126" VerticalAlignment="Top"/>

最后这是我的datagrid xml:

{{1}}

2 个答案:

答案 0 :(得分:1)

我强烈建议您将MVVM模式用于WPF应用程序。 将ListCollectionView用于DataGrid.ItemsSource,将ObservableCollection(Of ...)用于ListCollectionView的项目。然后使用ListCollectionView.Filter谓词过滤DataGrid中的项目。您将对您当前的oldschool Windows Forms方法感到非常失望和愤怒。

答案 1 :(得分:0)

您应该过滤内存中的DataView。还要确保正确拼写列名称。似乎没有从您的查询返回“名称”列,但有一个“命名”列。

试试这个:

Private Sub textBox1_Copy1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles textBox1_Copy1.TextChanged
    Dim dataView = CType(gornjiGrid.ItemsSource, System.Data.DataView)
    If String.IsNullOrEmpty(textBox1_Copy1.Text) Then
        dataView.RowFilter = Nothing
    Else
        dataView.RowFilter = " named like '*" & textBox1_Copy1.Text & "*'"
    End If

End Sub