如何对datagrid表进行排序

时间:2015-04-07 11:47:47

标签: c# wpf sqlite datagrid

我使用sqlite从DataBase填充datagrid - ShowDataBase(string a);

然后我想对它进行排序,单击按钮时 (注意!我只想在程序中对它进行排序(不是修改数据库)。只想删除错误的行)

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        ShowDataBase("Pacients");

        if ((bool)SortFromCheckBox.IsChecked)
        {
            //Delete all data earlier than data that user asked for
            for (int i = DataGridMain.Items.Count - 1; i >= 0; i--)
            {
                DataGridRow row = (DataGridRow)DataGridMain.ItemContainerGenerator.ContainerFromIndex(i);
                var item = DataGridMain.Items[i];
                var data = DataGridMain.Columns[4].GetCellContent(item);
                if ((Convert.ToDateTime(data)) <= (Convert.ToDateTime(SortFromTextBox.Text)))
                {
                    //Smth to delete row № i from datagrid

                }
            }
        }
        if ((bool)SortUntilCheckBox.IsChecked)
        {
            //Delete all data older than data that user asked for
        }
        if ((bool)SortByClientCheckBox.IsChecked)
        {
            //Delete all data where client cell is != name that user want to sort by
        }
        if ((bool)SortByDoctorCheckBox.IsChecked)
        {
            //Delete all data where doctor cell is != name that user want to sort by
        }
    }

1 个答案:

答案 0 :(得分:1)

根据我的理解,您需要一种功能来过滤和排序数据。您可以为此目的使用机制的构建:CollectionView。您需要创建一个源将设置为从数据库获取的数据。

要过滤集合,您可以使用collectionView.Filter并为您的目的定义不同的过滤器。对于排序功能,您应该使用collectionView.SortDescriptions。通过这种方式,您可以使用.NET中已存在的工具,您只需根据需要进行自定义。

使用这种方法,您不会从基本集合中删除任何内容,因此您只需要获取一次数据并在应用程序中以不同方式呈现它。如果您使用MVVM方法,则此代码应在ViewModel中完成。如果您坚持在视图中实现此类功能,则可以使用<CollectionViewSource>

您可以在这里找到一些资源: