Binden von Daten an das DataGridView-Steuerelement in Windows Forms

Das DataGridView-Steuerelement unterstützt das Standard-Datenbindungsmodell von Windows Forms und ermöglicht so die Bindung an eine Vielzahl von Datenquellen. Normalerweise binden Sie an eine BindingSource, die die Interaktion mit der Datenquelle verwaltet. Die BindingSource kann eine beliebige Windows Forms-Datenquelle darstellen. Damit erhalten Sie viel Flexibilität bei der Auswahl oder Änderung des Speicherorts Ihrer Daten. Weitere Informationen zu den vom DataGridView-Steuerelement unterstützten Datenquellen finden Sie in der Übersicht über das DataGridView-Steuerelement.

Visual Studio bietet eine umfangreiche Unterstützung für die Datenbindung an das DataGridView-Steuerelement. Weitere Informationen finden Sie unter Binden von Daten an das DataGridView-Steuerelement in Windows Forms mithilfe des Designers.

So verbinden Sie ein DataGridView-Steuerelement mit Daten

  1. Implementieren Sie eine Methode, mit der die Details für das Abrufen von Daten behandelt werden. Im folgenden Codebeispiel wird eine GetData-Methode implementiert, die einen SqlDataAdapter initialisiert und verwendet, um eine DataTable mit Daten zu füllen. Anschließend wird die DataTable an die BindingSource gebunden.

  2. Binden Sie im Load-Ereignishandler Ihres Formulars das DataGridView-Steuerelement an die BindingSource, und rufen Sie die GetData-Methode auf, um Daten abzurufen.

Beispiel

In diesem vollständigen Codebeispiel werden Daten aus einer Datenbank abgerufen, um ein DataGridView-Steuerelement in einem Windows-Formular aufzufüllen. Das Formular verfügt auch über Schaltflächen für das Neuladen von Daten und das Übermitteln von Änderungen an die Datenbank.

Für dieses Beispiel benötigen Sie Folgendes:

  • Zugriff auf die SQL Server-Beispieldatenbank „Northwind“. Weitere Informationen zum Installieren der Northwind-Beispieldatenbank finden Sie unter Abrufen von Beispieldatenbanken für ADO.NET-Codebeispiele.

  • Verweise auf die Assemblys „System“, „System.Windows.Forms“, „System.Data“ und „System.XML“.

Zum Erstellen und Ausführen dieses Beispiels fügen Sie den Code in die Form1-Codedatei in einem neuen Windows Forms-Projekt ein. Weitere Informationen zum Erstellen über die C#- oder Visual Basic-Befehlszeile finden Sie unter Erstellen über die Befehlszeile mit „csc.exe“ oder Erstellen über die Befehlszeile.

Füllen Sie die connectionString-Variable im Beispiel mit den Werten für Ihre Verbindung mit der SQL Server-Beispieldatenbank „Northwind“ auf. Die Windows-Authentifizierung (auch als integrierte Sicherheit bezeichnet) bietet eine sicherere Möglichkeit, eine Verbindung mit der Datenbank herzustellen, als ein Kennwort in der Verbindungszeichenfolge zu speichern. Weitere Informationen zur Verbindungssicherheit finden Sie unter Schützen von Verbindungsinformationen.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}
public class Form1 : Form
{
    private DataGridView dataGridView1 = new DataGridView();
    private BindingSource bindingSource1 = new BindingSource();
    private SqlDataAdapter dataAdapter = new SqlDataAdapter();
    private Button reloadButton = new Button();
    private Button submitButton = new Button();

    [STAThread()]
    public static void Main()
    {
        Application.Run(new Form1());
    }

    // Initialize the form.
    public Form1()
    {
        dataGridView1.Dock = DockStyle.Fill;

        reloadButton.Text = "Reload";
        submitButton.Text = "Submit";
        reloadButton.Click += new EventHandler(ReloadButton_Click);
        submitButton.Click += new EventHandler(SubmitButton_Click);

        FlowLayoutPanel panel = new FlowLayoutPanel
        {
            Dock = DockStyle.Top,
            AutoSize = true
        };
        panel.Controls.AddRange(new Control[] { reloadButton, submitButton });

        Controls.AddRange(new Control[] { dataGridView1, panel });
        Load += new EventHandler(Form1_Load);
        Text = "DataGridView data binding and updating demo";
    }

    private void GetData(string selectCommand)
    {
        try
        {
            // Specify a connection string.
            // Replace <SQL Server> with the SQL Server for your Northwind sample database.
            // Replace "Integrated Security=True" with user login information if necessary.
            String connectionString =
                "Data Source=<SQL Server>;Initial Catalog=Northwind;" +
                "Integrated Security=True";

            // Create a new data adapter based on the specified query.
            dataAdapter = new SqlDataAdapter(selectCommand, connectionString);

            // Create a command builder to generate SQL update, insert, and
            // delete commands based on selectCommand.
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

            // Populate a new data table and bind it to the BindingSource.
            DataTable table = new DataTable
            {
                Locale = CultureInfo.InvariantCulture
            };
            dataAdapter.Fill(table);
            bindingSource1.DataSource = table;

            // Resize the DataGridView columns to fit the newly loaded content.
            dataGridView1.AutoResizeColumns(
                DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
        }
        catch (SqlException)
        {
            MessageBox.Show("To run this example, replace the value of the " +
                "connectionString variable with a connection string that is " +
                "valid for your system.");
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Bind the DataGridView to the BindingSource
        // and load the data from the database.
        dataGridView1.DataSource = bindingSource1;
        GetData("select * from Customers");
    }

    private void ReloadButton_Click(object sender, EventArgs e)
    {
        // Reload the data from the database.
        GetData(dataAdapter.SelectCommand.CommandText);
    }

    private void SubmitButton_Click(object sender, EventArgs e)
    {
        // Update the database with changes.
        dataAdapter.Update((DataTable)bindingSource1.DataSource);
    }
}
Imports System.Data.SqlClient
Imports System.Windows.Forms

Public Class Form1
    Inherits Form

    Private dataGridView1 As New DataGridView()
    Private bindingSource1 As New BindingSource()
    Private dataAdapter As New SqlDataAdapter()
    Private WithEvents ReloadButton As New Button()
    Private WithEvents SubmitButton As New Button()

    Public Shared Sub Main()
        Application.Run(New Form1())
    End Sub

    ' Initialize the form.
    Public Sub New()

        dataGridView1.Dock = DockStyle.Fill

        ReloadButton.Text = "Reload"
        SubmitButton.Text = "Submit"

        Dim panel As New FlowLayoutPanel With {
            .Dock = DockStyle.Top,
            .AutoSize = True
        }
        panel.Controls.AddRange(New Control() {ReloadButton, SubmitButton})

        Controls.AddRange(New Control() {dataGridView1, panel})
        Text = "DataGridView data binding and updating demo"

    End Sub

    Private Sub GetData(ByVal selectCommand As String)

        Try
            ' Specify a connection string.  
            ' Replace <SQL Server> with the SQL Server for your Northwind sample database.
            ' Replace "Integrated Security=True" with user login information if necessary.
            Dim connectionString As String =
                "Data Source=<SQL Server>;Initial Catalog=Northwind;" +
                "Integrated Security=True;"

            ' Create a new data adapter based on the specified query.
            dataAdapter = New SqlDataAdapter(selectCommand, connectionString)

            ' Create a command builder to generate SQL update, insert, and
            ' delete commands based on selectCommand. 
            Dim commandBuilder As New SqlCommandBuilder(dataAdapter)

            ' Populate a new data table and bind it to the BindingSource.
            Dim table As New DataTable With {
                .Locale = Globalization.CultureInfo.InvariantCulture
            }
            dataAdapter.Fill(table)
            bindingSource1.DataSource = table

            ' Resize the DataGridView columns to fit the newly loaded content.
            dataGridView1.AutoResizeColumns(
                DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader)

        Catch ex As SqlException
            MessageBox.Show("To run this example, replace the value of the " +
                "connectionString variable with a connection string that is " +
                "valid for your system.")
        End Try

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
        Handles Me.Load

        ' Bind the DataGridView to the BindingSource
        ' and load the data from the database.
        dataGridView1.DataSource = bindingSource1
        GetData("select * from Customers")

    End Sub

    Private Sub ReloadButton_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles ReloadButton.Click

        ' Reload the data from the database.
        GetData(dataAdapter.SelectCommand.CommandText)

    End Sub

    Private Sub SubmitButton_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles SubmitButton.Click

        ' Update the database with changes.
        dataAdapter.Update(CType(bindingSource1.DataSource, DataTable))

    End Sub

End Class

Weitere Informationen