Vorgehensweise: Navigieren durch Daten in Windows Forms

Die einfachste Möglichkeit, in einer Windows-Anwendung durch die Datensätze in einer Datenquelle zu navigieren, besteht darin, eine BindingSource-Komponente an die Datenquelle und die Steuerelemente an das BindingSource-Objekt zu binden. Anschließend können Sie die integrierte Navigationsmethode für BindingSource verwenden, z. B. MoveNext, MoveLast, MovePrevious und MoveFirst. Durch die Verwendung dieser Methoden werden die Eigenschaften Position und Current von BindingSource entsprechend angepasst. Sie können ein Element auch suchen und als aktuelles Element festlegen, indem Sie die Eigenschaft Position festlegen.

So erhöhen Sie die Position in einer Datenquelle

  1. Legen Sie die Eigenschaft Position des BindingSource-Objekts für Ihre gebundenen Daten auf die Datensatzposition fest, zu der sie wechseln möchten. Im folgenden Beispiel wird veranschaulicht, wie die Methode MoveNext von BindingSource verwendet wird, um die Position-Eigenschaft zu erhöhen, wenn auf nextButton geklickt wird. Das BindingSource-Objekt ist der Customers-Tabelle eines Datasets Northwind zugeordnet.

    Hinweis

    Das Festlegen der Eigenschaft Position auf einen Wert außerhalb des ersten oder letzten Datensatzes führt nicht zu einem Fehler, da .NET Framework nicht zulässt, dass Sie die Position auf einen Wert außerhalb der Grenzen der Liste festlegen. Wenn Ihre Anwendung stets wissen muss, ob der erste oder letzte Datensatz unter-/überschritten wurde, schließen Sie Logik ein, um zu testen, ob die Anzahl der Datenelemente überschritten wird.

    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
    

So überprüfen Sie, ob Sie das Ende oder den Anfang über-/unterschritten haben

  1. Erstellen Sie einen Ereignishandler für das PositionChanged-Ereignis. Im Handler können Sie testen, ob der vorgeschlagene Positionswert die tatsächliche Datenelementanzahl überschreitet.

    Im folgenden Beispiel wird veranschaulicht, wie Sie testen können, ob Sie das letzte Datenelement erreicht haben. Wenn Sie sich im letzten Element befinden, wird die Schaltfläche Weiter im Formular deaktiviert.

    Hinweis

    Beachten Sie Folgendes: Wenn Sie die Liste, durch die Sie im Code navigieren ändern, müssen Sie die Schaltfläche Weiter wieder aktivieren, damit Benutzer durch die gesamte neue Liste springen können. Beachten Sie außerdem, dass das obige PositionChanged-Ereignis für das spezifische BindingSource-Objekt, mit dem Sie arbeiten, der entsprechenden Ereignisbehandlungsmethode zugeordnet werden muss. Im Folgenden finden Sie ein Beispiel für eine Methode zum Behandeln des PositionChanged-Ereignisses:

    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
    

So suchen Sie ein Element und legen es als aktuelles Element fest

  1. Suchen Sie den Datensatz, den Sie als aktuelles Element festlegen möchten. Sie können dies mithilfe der Find-Methode von BindingSource tun, wenn Ihre Datenquelle IBindingList implementiert. Einige Beispiele für Datenquellen, die IBindingList implementieren, sind BindingList<T> und 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
    

Weitere Informationen