DataGrid 不按 DESC 排序

问题描述 投票:0回答:2

Access中有一个数据库,我在搜索时获取数据,我想对结果进行排序,在按ASC排序时它可以工作,但在DESC上没有任何反应,这是MainWindow.xaml中的DataGrid代码:

<DataGrid Name="dataGrid" CanUserSortColumns="True"  HorizontalAlignment="Center" Height="742" Margin="0,142,0,0" VerticalAlignment="Top" Width="1440" Sorting="dataGrid_Sorting"/>

这是与 DataGrid 交互的,使用 Button_Click 方法,在数据库中搜索数据:

readonly string content = File.ReadAllText(@"C:\Users\User\source\repos\CG\BaseLink.txt");
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string searchValue = searchBox.Text; // значение поиска, введенное в поле searchBox
            OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + content + "nwind.mdb");
            connection.Open();
 
            // создаем объект OleDbCommand и выполняем параметризованный запрос
            OleDbCommand command = new OleDbCommand("SELECT * FROM Customers WHERE CustomerID LIKE ? OR CompanyName LIKE ? " +
                "OR ContactName LIKE ? OR ContactTitle LIKE ? OR Address LIKE ? OR City LIKE ? OR Region LIKE ?" +
                "OR PostalCode LIKE ? OR Country LIKE ? OR Phone LIKE ? OR Fax LIKE ?;", connection);
            command.Parameters.AddWithValue("@searchValue1", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue2", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue3", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue4", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue5", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue6", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue7", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue8", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue9", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue10", "%" + searchValue + "%");
            command.Parameters.AddWithValue("@searchValue11", "%" + searchValue + "%");
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command);
 
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet, "Customers");
 
            dataGrid.ItemsSource = dataSet.Tables["Customers"].DefaultView;
            connection.Close();
 
        }

这是对数据进行排序的 dataGrid_Sorting 方法:

private void dataGrid_Sorting(object sender, DataGridSortingEventArgs e)
        {
            DataGridColumn column = e.Column;
 
            // Определение направления сортировки
            ListSortDirection direction;
            if (column.SortDirection == null)
            {
                // Сортировка не была применена ранее - устанавливаем направление сортировки по умолчанию
                direction = ListSortDirection.Ascending;
            }
            else if (column.SortDirection == ListSortDirection.Ascending)
            {
                // Сортировка применена в направлении по возрастанию - меняем направление на убывание
                direction = ListSortDirection.Descending;
            }
            else
            {
                // Сортировка применена в направлении по убыванию - меняем направление на возрастание
                direction = ListSortDirection.Ascending;
            }
 
            // Установка направления сортировки
            column.SortDirection = direction;
 
            // Создание команды для выполнения запроса к базе данных Access
            string sortOrder = (direction == ListSortDirection.Ascending) ? "ASC" : "DESC";
            OleDbCommand command = new OleDbCommand("SELECT * FROM Customers ORDER BY [" + column.SortMemberPath + "] " + sortOrder);
 
            // Выполнение запроса к базе данных Access и получение данных в виде DataTable
            DataTable dataTable = new DataTable();
            using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + content + "nwind.mdb"))
            {
                connection.Open();
                command.Connection = connection;
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                {
                    adapter.Fill(dataTable);
                }
            }
 
            // Обновление источника данных ItemsSource для DataGrid
            dataGrid.ItemsSource = dataTable.DefaultView;
 
            // Обновление данных в DataGrid
            dataGrid.Items.Refresh();
        }

与AI合作,这是第一个项目,请勿重击,谢谢帮助!

我正在尝试在 DataGrid 中实现排序,并寻求帮助来实现此功能

c# sorting datagrid
2个回答
0
投票

要对 DataGrid 中的数据进行分组、排序和筛选,请将 DataGrid 绑定到支持这些操作的 ICollectionView 实现。

ICollectionView实现接口INotifyCollectionChangedDataView未实现此接口。

如何:对 DataGrid 控件中的数据进行分组、排序和筛选


0
投票

如果您的 [dataTable] 变量填充了正确的数据(按 DESC 顺序),我认为您需要再次绑定数据。像这样的东西:

dataGrid.Columns.Clear();
dataGrid.DataSource = dataTable;

但顺便说一句,您不需要再次引用数据库来排序数据。 您可以使用 Sort() 方法来执行此操作(dataGridView1.Sort(Column, Direction))。 欲了解更多信息,请参阅此链接: learn_microsoft_com

© www.soinside.com 2019 - 2024. All rights reserved.