Поделиться через


Практическое руководство. Навигация по данным в 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. В обработчике можно проверить, превышает ли предлагаемое значение позиции фактическое число элементов данных.

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

    Заметка

    Помните, что если вы изменяете список, который вы перемещаете в коде, необходимо повторно включить кнопку Далее, чтобы пользователи могли просматривать всю длину нового списка. Кроме того, имейте в виду, что указанное выше событие 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. Найдите запись, которую вы хотите задать в качестве текущего элемента. Вы можете сделать это, используя метод Find из BindingSource, если ваш источник данных реализует IBindingList. Ниже приведены некоторые примеры источников данных, реализующих IBindingListBindingList<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
    

См. также