Vorgehensweise: Datenbindung in Windows Forms-DataGridView-SteuerelementHow to: Bind data to the Windows Forms DataGridView control

Die DataGridView -Steuerelement unterstützt die standardmäßige Windows Forms-Datenbindungsmodell verwendet, damit es mit einer Vielzahl von Datenquellen gebunden werden kann.The DataGridView control supports the standard Windows Forms data binding model, so it can bind to a variety of data sources. In der Regel Sie binden an eine BindingSource , verwaltet die Interaktion mit der Datenquelle.Usually, you bind to a BindingSource that manages the interaction with the data source. Die BindingSource kann jede beliebige Windows Forms-Datenquelle, die Ihnen viel Flexibilität bei der Auswahl oder Änderung des Daten Speicherorts bietet sein.The BindingSource can be any Windows Forms data source, which gives you great flexibility when choosing or modifying your data's location. Weitere Informationen zu den Datenquellen der DataGridView Steuerelement unterstützt, finden Sie die Übersicht über das DataGridView-Steuerelement.For more information about data sources the DataGridView control supports, see the DataGridView control overview.

Visual Studio bietet umfassende Unterstützung für die Datenbindung an das DataGridView-Steuerelement.Visual Studio has extensive support for data binding to the DataGridView control. Weitere Informationen finden Sie unter Vorgehensweise: Binden von Daten an das Windows Forms-DataGridView-Steuerelement, das mithilfe des Designers.For more information, see How to: Bind data to the Windows Forms DataGridView control using the Designer.

So verbinden ein DataGridView-Steuerelement mit Daten:To connect a DataGridView control to data:

  1. Implementieren Sie eine Methode, um die Details zum Abrufen der Daten zu behandeln.Implement a method to handle the details of retrieving the data. Das folgende Codebeispiel implementiert eine GetData -Methode, initialisiert ein SqlDataAdapter, und verwendet ihn zum Auffüllen einer DataTable.The following code example implements a GetData method that initializes a SqlDataAdapter, and uses it to populate a DataTable. Klicken Sie dann bindet die DataTable auf die BindingSource.It then binds the DataTable to the BindingSource.

  2. Des Formulars Load Ereignishandler, binden die DataGridView die Steuerung an die BindingSource, und rufen Sie die GetData Methode zum Abrufen der Daten.In the form's Load event handler, bind the DataGridView control to the BindingSource, and call the GetData method to retrieve the data.

BeispielExample

Dieser vollständige Codebeispiel ruft Daten ab, aus einer Datenbank in einem DataGridView-Steuerelement in einem Windows-Formular zu füllen.This complete code example retrieves data from a database to populate a DataGridView control in a Windows form. Das Formular verfügt auch über die Schaltflächen zum Laden von Daten und Übermitteln von Änderungen an der Datenbank.The form also has buttons to reload data and submit changes to the database.

Für dieses Beispiel benötigen Sie Folgendes:This example requires:

  • Zugriff mit der Beispieldatenbank Northwind-SQL Server.Access to a Northwind SQL Server sample database. Weitere Informationen zum Installieren der Beispieldatenbank Northwind finden Sie unter erhalten Sie die Beispieldatenbanken ADO.NET Codebeispiele.For more information about installing the Northwind sample database, see Get the sample databases for ADO.NET code samples.

  • Verweise auf die Assemblys System, "System.Windows.Forms", "System.Data" und "System.xml".References to the System, System.Windows.Forms, System.Data, and System.Xml assemblies.

Fügen Sie zum Erstellen und dieses Beispiel ausführen, die den Code in die Form1 Codedatei in einem neuen Windows Forms-Projekt.To build and run this example, paste the code into the Form1 code file in a new Windows Forms project. Informationen zum Erstellen von der C# oder Visual Basic über die Befehlszeile, finden Sie unter Befehlszeile mit csc.exe oder erstellen über die Befehlszeile.For information about building from the C# or Visual Basic command line, see Command-line building with csc.exe or Build from the command line.

Füllen Sie die connectionString Variable im Beispiel durch die Werte für Ihre Beispieldatenbank Northwind-SQL Server-Verbindung.Populate the connectionString variable in the example with the values for your Northwind SQL Server sample database connection. Windows-Authentifizierung, integrierte Sicherheit, so genannte ist eine sicherere Methode für die Verbindung mit der Datenbank als ein Kennwort in der Verbindungszeichenfolge speichern.Windows Authentication, also called integrated security, is a more secure way to connect to the database than storing a password in the connection string. Weitere Informationen zur verbindungssicherheit finden Sie unter Schützen von Verbindungsinformationen.For more information about connection security, see Protect connection information.

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

Siehe auchSee also