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


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

Обновлен: Ноябрь 2007

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

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

  • Присвойте номер записи связанных данных, на которую следует переместиться, свойству Position компонента BindingSource . В следующем примере демонстрируется использование метода MoveNext компонента BindingSource для увеличения значения свойства Position при щелчке элемента управления nextButton. Компонент BindingSource связан с таблицей Customers набора данных Northwind.

    b63ha24w.alert_note(ru-ru,VS.90).gifПримечание.

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

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

Чтобы проверить, достигнута ли первая или последняя запись, выполните следующие действия.

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

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

    b63ha24w.alert_note(ru-ru,VS.90).gifПримечание.

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

    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
    
    void customersBindingSource_PositionChanged(object sender, EventArgs e)
    {
        if (customersBindingSource.Position == customersBindingSource.Count - 1)
            nextButton.Enabled = false;
        else
            nextButton.Enabled = true;
    }
    

Чтобы найти элемент и сделать его текущим, выполните следующие действия.

  • Найдите запись, которую необходимо сделать текущим элементом. Если источник данных реализует интерфейс IBindingList, то для поиска элемента можно использовать метод Find компонента BindingSource. В качестве примеров источников данных, реализующих интерфейс IBindingList, можно назвать объекты BindingList<T> и DataView.

    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
    
    void findButton_Click(object sender, EventArgs e)
    {
        int foundIndex = customersBindingSource.Find("CustomerID", "ANTON");
        customersBindingSource.Position = foundIndex;
    }
    

См. также

Основные понятия

Источники данных, поддерживаемые Windows Forms

Получение уведомления об изменении данных, связанных с элементом управления, в Windows Forms

Связывание данных и Windows Forms

Другие ресурсы

Связывание элементов управления Windows Forms с данными