Практическое руководство. Сортировка и фильтрация данных ADO.NET с помощью компонента BindingSource в Windows Forms

Вы можете добавить возможность сортировки и фильтрации для элемента управления BindingSource с помощью свойств Sort и Filter. Можно также применить простую сортировку, если базовый источник данных является IBindingList, а также можно применить фильтрацию и расширенную сортировку, если источник данных является IBindingListView. Для свойства Sort требуется стандартный синтаксис ADO.NET: строка, представляющая имя столбца данных в источнике данных, за которым следует ASC или DESC, чтобы указать, следует ли отсортировать список по возрастанию или по убыванию. Можно задать расширенную сортировку или сортировку по нескольким столбцам, разделив столбцы запятыми. Свойство Filter принимает строковое выражение.

Примечание.

Хранение конфиденциальных сведений (например, пароля) в строке подключения может повлиять на безопасность приложения. Использование проверки подлинности Windows (также называемой встроенными средствами безопасности) — более безопасный способ управления доступом к базе данных. Дополнительные сведения см. в разделе Защита сведений о подключении.

Фильтрация данных с помощью BindingSource

  • Задайте для свойства нужное выражение Filter.

    В следующем примере кода выражение представляет собой имя столбца, за которым следует значение, выбранное для столбца.

BindingSource1.Filter = "ContactTitle='Owner'";
BindingSource1.Filter = "ContactTitle='Owner'"

Фильтрация данных с помощью BindingSource

  1. Задайте в качестве значения свойства Sort имя выбранного столбца, за которым следует ASC или DESC (определяет, будет ли сортировка выполняться по возрастанию или по убыванию).

  2. Для разделения столбцов используйте запятые.

BindingSource1.Sort = "Country DESC, Address ASC";
BindingSource1.Sort = "Country DESC, Address ASC"

Пример

В следующем примере кода данные из таблицы Customers примера базы данных Northwind загружаются в элемент управления DataGridView, а также выполняется фильтрация и сортировка отображаемых данных.

private void InitializeSortedFilteredBindingSource()
{
    // Create the connection string, data adapter and data table.
    SqlConnection connectionString =
         new SqlConnection("Initial Catalog=Northwind;" +
         "Data Source=localhost;Integrated Security=SSPI;");
    SqlDataAdapter customersTableAdapter =
        new SqlDataAdapter("Select * from Customers", connectionString);
    DataTable customerTable = new DataTable();

    // Fill the adapter with the contents of the customer table.
    customersTableAdapter.Fill(customerTable);

    // Set data source for BindingSource1.
    BindingSource1.DataSource = customerTable;

    // Filter the items to show contacts who are owners.
    BindingSource1.Filter = "ContactTitle='Owner'";

    // Sort the items on the company name in descending order.
    BindingSource1.Sort = "Country DESC, Address ASC";

    // Set the data source for dataGridView1 to BindingSource1.
    dataGridView1.DataSource = BindingSource1;
}
Private Sub InitializeSortedFilteredBindingSource()

    ' Create the connection string, data adapter and data table.
    Dim connectionString As New SqlConnection("Initial Catalog=Northwind;" & _
        "Data Source=localhost;Integrated Security=SSPI;")
    Dim customersTableAdapter As New SqlDataAdapter("Select * from Customers", _
        connectionString)
    Dim customerTable As New DataTable()

    ' Fill the adapter with the contents of the customer table.
    customersTableAdapter.Fill(customerTable)

    ' Set data source for BindingSource1.
    BindingSource1.DataSource = customerTable

    ' Filter the items to show contacts who are owners.
    BindingSource1.Filter = "ContactTitle='Owner'"
    ' Sort the items on the company name in descending order.
    BindingSource1.Sort = "Country DESC, Address ASC"

    ' Set the data source for dataGridView1 to BindingSource1.
    dataGridView1.DataSource = BindingSource1

   
End Sub

Компиляция кода

Для выполнения этого примера вставьте код в форму, которая содержит BindingSource с именем BindingSource1 и DataGridView с именем dataGridView1. Обработайте событие Load для формы и вызовите InitializeSortedFilteredBindingSource в методе обработчика событий загрузки.

См. также