DataGridView.DataSource DataGridView.DataSource DataGridView.DataSource DataGridView.DataSource Property


获取或设置 DataGridView 所显示数据的数据源。Gets or sets the data source that the DataGridView is displaying data for.

 property System::Object ^ DataSource { System::Object ^ get(); void set(System::Object ^ value); };
public object DataSource { get; set; }
member this.DataSource : obj with get, set
Public Property DataSource As Object


包括要显示的 DataGridView 的数据的对象。The object that contains data for the DataGridView to display.


数据源中出现错误,这是由于没有 DataError 事件的处理程序或处理程序已将 ThrowException 属性设置为 trueAn error occurred in the data source and either there is no handler for the DataError event or the handler has set the ThrowException property to true. 通常情况下,可将该异常对象强制转换为类型 FormatExceptionThe exception object can typically be cast to type FormatException.


下面的代码示例演示如何初始化简单的数据绑定DataGridViewThe following code example demonstrates how to initialize a simple data-bound DataGridView. 它还演示如何设置DataSource属性。It also demonstrates how to set the DataSource property.

#using <System.Transactions.dll>
#using <System.EnterpriseServices.dll>
#using <System.Xml.dll>
#using <System.Drawing.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Data.dll>

using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
using namespace System::Windows::Forms;
using namespace System::Drawing;
public ref class Form1: public System::Windows::Forms::Form
      : Form()
      //This call is required by the Windows Form Designer.
      //Add any initialization after the InitializeComponent() call


      if ( components != nullptr )
         delete components;

   System::Windows::Forms::DataGridView ^ dataGridView1;
   System::Windows::Forms::BindingSource ^ bindingSource1;

   //Required by the Windows Form Designer
   System::ComponentModel::IContainer^ components;

   //NOTE: The following procedure is required by the Windows Form Designer
   //It can be modified using the Windows Form Designer.  
   //Do not modify it using the code editor.

   void InitializeComponent()
      this->dataGridView1 = gcnew System::Windows::Forms::DataGridView;
      this->bindingSource1 = gcnew System::Windows::Forms::BindingSource;

      this->dataGridView1->Location = System::Drawing::Point( 96, 71 );
      this->dataGridView1->Name = "DataGridView1";
      this->dataGridView1->Size = System::Drawing::Size( 321, 286 );
      this->dataGridView1->TabIndex = 0;

      this->ClientSize = System::Drawing::Size( 518, 413 );
      this->Controls->Add( this->dataGridView1 );
      this->Name = "Form1";
      this->Text = "Form1";
      this->ResumeLayout( false );


   static property Form1^ GetInstance 
      Form1^ get()
         if ( m_DefaultInstance == nullptr || m_DefaultInstance->IsDisposed )
            System::Threading::Monitor::Enter( m_SyncObject );
               if ( m_DefaultInstance == nullptr || m_DefaultInstance->IsDisposed )
                  m_DefaultInstance = gcnew Form1;
               System::Threading::Monitor::Exit( m_SyncObject );

         return m_DefaultInstance;

   static Form1^ m_DefaultInstance;
   static Object^ m_SyncObject = gcnew Object;

   void InitializeDataGridView()
         // Set up the DataGridView.
         dataGridView1->Dock = DockStyle::Fill;

         // Automatically generate the DataGridView columns.
         dataGridView1->AutoGenerateColumns = true;

         // Set up the data source.
         bindingSource1->DataSource = GetData( "Select * From Products" );
         dataGridView1->DataSource = bindingSource1;

         // Automatically resize the visible rows.
         dataGridView1->AutoSizeRowsMode = DataGridViewAutoSizeRowsMode::DisplayedCellsExceptHeaders;

         // Set the DataGridView control's border.
         dataGridView1->BorderStyle = BorderStyle::Fixed3D;

         // Put the cells in edit mode when user enters them.
         dataGridView1->EditMode = DataGridViewEditMode::EditOnEnter;
      catch ( SqlException^ ) 
         MessageBox::Show( "To run this sample replace connection.ConnectionString"
         " with a valid connection string to a Northwind"
         " database accessible to your system.", "ERROR", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
      catch ( System::Exception^ ex ) 
         MessageBox::Show( ex->ToString() );

   DataTable^ GetData( String^ sqlCommand )
      String^ connectionString = "Integrated Security=SSPI;Persist Security Info=False;"
      "Initial Catalog=Northwind;Data Source= localhost";
      SqlConnection^ northwindConnection = gcnew SqlConnection( connectionString );
      SqlCommand^ command = gcnew SqlCommand( sqlCommand,northwindConnection );
      SqlDataAdapter^ adapter = gcnew SqlDataAdapter;
      adapter->SelectCommand = command;
      DataTable^ table = gcnew DataTable;
      adapter->Fill( table );
      return table;

int main()
   Application::Run( gcnew Form1 );
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Drawing;

public class Form1 : System.Windows.Forms.Form
    private DataGridView dataGridView1 = new DataGridView();
    private BindingSource bindingSource1 = new BindingSource();

    public Form1()
        dataGridView1.Dock = DockStyle.Fill;

    private void InitializeDataGridView()
            // Set up the DataGridView.
            dataGridView1.Dock = DockStyle.Fill;

            // Automatically generate the DataGridView columns.
            dataGridView1.AutoGenerateColumns = true;

            // Set up the data source.
            bindingSource1.DataSource = GetData("Select * From Products");
            dataGridView1.DataSource = bindingSource1;

            // Automatically resize the visible rows.
            dataGridView1.AutoSizeRowsMode =

            // Set the DataGridView control's border.
            dataGridView1.BorderStyle = BorderStyle.Fixed3D;

            // Put the cells in edit mode when user enters them.
            dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
        catch (SqlException)
            MessageBox.Show("To run this sample replace connection.ConnectionString" +
                " with a valid connection string to a Northwind" +
                " database accessible to your system.", "ERROR",
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

    private static DataTable GetData(string sqlCommand)
        string connectionString = "Integrated Security=SSPI;" +
            "Persist Security Info=False;" +
            "Initial Catalog=Northwind;Data Source=localhost";

        SqlConnection northwindConnection = new SqlConnection(connectionString);

        SqlCommand command = new SqlCommand(sqlCommand, northwindConnection);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;

        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;

        return table;

    public static void Main()
        Application.Run(new Form1());
Imports System.Data
Imports System.Data.SqlClient
Imports System.Windows.Forms
Imports System.Drawing
Imports System

Public Class Form1
    Inherits System.Windows.Forms.Form

    Private WithEvents dataGridView1 As New DataGridView()
    Private bindingSource1 As New BindingSource()

    Public Sub New()

        Me.dataGridView1.Dock = DockStyle.Fill

    End Sub

    Private Sub InitializeDataGridView()
            ' Set up the DataGridView.
            With Me.dataGridView1
                ' Automatically generate the DataGridView columns.
                .AutoGenerateColumns = True

                ' Set up the data source.
                bindingSource1.DataSource = GetData("Select * From Products")
                .DataSource = bindingSource1

                ' Automatically resize the visible rows.
                .AutoSizeRowsMode = _

                ' Set the DataGridView control's border.
                .BorderStyle = BorderStyle.Fixed3D

                ' Put the cells in edit mode when user enters them.
                .EditMode = DataGridViewEditMode.EditOnEnter
            End With
        Catch ex As SqlException
            MessageBox.Show("To run this sample replace " _
                & "connection.ConnectionString with a valid connection string" _
                & "  to a Northwind database accessible to your system.", _
                "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Shared Function GetData(ByVal sqlCommand As String) _
        As DataTable

        Dim connectionString As String = _
            "Integrated Security=SSPI;Persist Security Info=False;" _
            & "Initial Catalog=Northwind;Data Source=localhost"

        Dim northwindConnection As SqlConnection = _
            New SqlConnection(connectionString)

        Dim command As New SqlCommand(sqlCommand, northwindConnection)
        Dim adapter As SqlDataAdapter = New SqlDataAdapter()
        adapter.SelectCommand = command

        Dim table As New DataTable
        table.Locale = System.Globalization.CultureInfo.InvariantCulture

        Return table

    End Function

    <STAThreadAttribute()> _
    Public Shared Sub Main()
        Application.Run(New Form1)
    End Sub

End Class


DataGridView类支持标准 Windows 窗体的数据绑定模型。The DataGridView class supports the standard Windows Forms data-binding model. 这意味着数据源可以是实现以下接口之一的任何类型:This means the data source can be of any type that implements one of the following interfaces:

有关具体示例, 请参阅本节末尾的 "示例" 部分和任务表。For specific examples, see the Example section and the task table at the end of this section.

通常, 你将绑定到一个BindingSource组件, 并将BindingSource该组件绑定到另一个数据源, 或者使用业务对象来填充它。Typically, you will bind to a BindingSource component and bind the BindingSource component to another data source or populate it with business objects. BindingSource组件是首选数据源, 因为它可以绑定到各种数据源, 并可自动解决许多数据绑定问题。The BindingSource component is the preferred data source because it can bind to a wide variety of data sources and can resolve many data binding issues automatically.

绑定到包含多个列表或表的数据源时, 必须将DataMember属性设置为指定要绑定到的列表或表的字符串。When binding to a data source that contains multiple lists or tables, you must set the DataMember property to a string that specifies the list or table to bind to. 但在绑定到BindingSource包含多个列表或表的组件时, 可以改为设置DataMemberBindingSource组件的属性。When binding to a BindingSource component that contains multiple lists or tables, however, you can set the DataMember property of the BindingSource component instead.

当绑定到对象集合而不是数据库数据时DataSourceNullValue , 通常会将DefaultCellStyle属性返回的对象的属性设置为null DBNull.Value, 而不是使用的默认值, 这是适用于数据库数据。When binding to an object collection rather than to database data, you will typically set the DataSourceNullValue property of the object returned by the DefaultCellStyle property to null rather than using the default value of DBNull.Value, which is appropriate for database data.

有关详细信息, 请参阅在Windows 窗体 DataGridView 控件中显示数据For more information, see Displaying Data in the Windows Forms DataGridView Control. 下表提供了与DataSource属性相关的常见任务的直接链接。The following table provides direct links to common tasks related to the DataSource property.

请参阅演练:使用两个 Windows 窗体 DataGridView 控件创建主窗体/详细信息窗体以及如何:将对象绑定到 Windows 窗体 DataGridView控件。See Walkthrough: Creating a Master/Detail Form Using Two Windows Forms DataGridView Controls and How to: Bind Objects to Windows Forms DataGridView Controls.