Практическое руководство. Навигация по набору данных, отображаемых в форме Windows Forms

В приложении Windows самый простой способ обеспечения навигации по записям в источнике данных заключается в привязке компонента BindingSource к источнику данных и последующей привязке элементов управления к BindingSource. Затем в BindingSource можно использовать встроенный метод навигации, такой как MoveNext, MoveLast, MovePrevious и MoveFirst. Использование этих методов будет соответствующим образом корректировать свойства Position и Current компонента BindingSource. Вы также можете найти элемент и установить его в качестве текущего элемента, задав свойство Position.

Увеличение позиции в источнике данных

  1. Задайте для свойства Position компонента BindingSource для ваших привязанных данных позицию записи, к которой нужно перейти. В следующем примере показано использование метода MoveNextBindingSource для увеличения значения свойства Position при щелчке nextButton. Компонент BindingSource связан с таблицей Customers набора данных Northwind.

    Примечание.

    Установка для свойства Position значения, выходящего за пределы первой или последней записи, не приводит к ошибке, поскольку .NET Framework не позволит вам установить для позиции значение за пределами списка. Если в вашем приложении важно знать, вышли ли вы за пределы первой или последней записи, включите логику для проверки того, превысите ли вы количество элементов данных.

    private void nextButton_Click(object sender, System.EventArgs e)
    {
        this.customersBindingSource.MoveNext();
    }
    
    Private Sub nextButton_Click(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles nextButton.Click
        Me.customersBindingSource.MoveNext()
    End Sub
    

Проверка, прошли ли вы конец или начало

  1. Создайте обработчик событий для события PositionChanged. В обработчике можно проверить, превышает ли предлагаемое значение позиции фактическое количество элементов данных.

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

    Примечание.

    Имейте в виду, что если вы измените список, по которому осуществляется навигация в коде, необходимо заново включить кнопку Далее, чтобы пользователи могли просматривать новый список на всю длину. Кроме того, не забывайте, что указанное выше событие PositionChanged для конкретного BindingSource, с которым вы работаете, должно быть связано с его методом обработки событий. Ниже приведен пример метода обработки события PositionChanged:

    void customersBindingSource_PositionChanged(object sender, EventArgs e)
    {
        if (customersBindingSource.Position == customersBindingSource.Count - 1)
            nextButton.Enabled = false;
        else
            nextButton.Enabled = true;
    }
    
    Sub customersBindingSource_PositionChanged(ByVal sender As Object, _
        ByVal e As EventArgs)
    
        If customersBindingSource.Position = _
            customersBindingSource.Count - 1 Then
            nextButton.Enabled = False
        Else
            nextButton.Enabled = True
        End If
    End Sub
    

Поиск элемента и установка его в качестве текущего элемента

  1. Найдите запись, которую вы хотите задать в качестве текущего элемента. Это можно сделать с помощью метода FindBindingSource, если источник данных реализует IBindingList. Примеры источников данных, реализующих IBindingList: BindingList<T>и DataView.

    void findButton_Click(object sender, EventArgs e)
    {
        int foundIndex = customersBindingSource.Find("CustomerID", "ANTON");
        customersBindingSource.Position = foundIndex;
    }
    
    Sub findButton_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles findButton.Click
        Dim foundIndex As Integer = customersBindingSource.Find("CustomerID", _
            "ANTON")
        customersBindingSource.Position = foundIndex
    End Sub
    

См. также