作法:將 DataView 物件繫結至 Windows Forms DataGridView 控制項How to: Bind a DataView Object to a Windows Forms DataGridView Control

DataGridView 控制項以表格式顯示資料,是一項功能強大、有彈性的方式。The DataGridView control provides a powerful and flexible way to display data in a tabular format. DataGridView 控制項支援標準的 Windows Form 資料繫結模型,因此它將繫結至 DataView 和各種其他資料來源。The DataGridView control supports the standard Windows Forms data binding model, so it will bind to DataView and a variety of other data sources. 不過,在大部分情況下,您會繫結至 BindingSource 元件,以便管理與資料來源互動的詳細資料。In most situations, however, you will bind to a BindingSource component that will manage the details of interacting with the data source.

如需控制項的DataGridView詳細資訊,請參閱DataGridView 控制項總覽For more information about the DataGridView control, see DataGridView Control Overview.

若要將 DataGridView 控制項連接至 DataViewTo connect a DataGridView control to a DataView

  1. 實作一種方法來處理從資料庫中擷取資料的詳細資料。Implement a method to handle the details of retrieving data from a database. 下列程式碼範例會實作 GetData 方法,而此方法會初始化 SqlDataAdapter 元件並用它來填入 DataSetThe following code example implements a GetData method that initializes a SqlDataAdapter component and uses it to fill a DataSet. 請務必將 connectionString 變數設定為適用於您資料庫的值。Be sure to set the connectionString variable to a value that is appropriate for your database. 您將需要已安裝 AdventureWorks SQL Server 範例資料庫之伺服器的存取權。You will need access to a server with the AdventureWorks SQL Server sample database installed.

    private void GetData()
    {
        try
        {
            // Initialize the DataSet.
            dataSet = new DataSet();
            dataSet.Locale = CultureInfo.InvariantCulture;
    
            // Create the connection string for the AdventureWorks sample database.
            string connectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;"
                + "Integrated Security=true;";
    
            // Create the command strings for querying the Contact table.
            string contactSelectCommand = "SELECT ContactID, Title, FirstName, LastName, EmailAddress, Phone FROM Person.Contact";
    
            // Create the contacts data adapter.
            contactsDataAdapter = new SqlDataAdapter(
                contactSelectCommand,
                connectionString);
    
            // Create a command builder to generate SQL update, insert, and
            // delete commands based on the contacts select command. These are used to
            // update the database.
            SqlCommandBuilder contactsCommandBuilder = new SqlCommandBuilder(contactsDataAdapter);
    
            // Fill the data set with the contact information.
            contactsDataAdapter.Fill(dataSet, "Contact");
    
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    
    Private Sub GetData()
        Try
            ' Initialize the DataSet.
            dataSet = New DataSet()
            dataSet.Locale = CultureInfo.InvariantCulture
    
            ' Create the connection string for the AdventureWorks sample database.
            Dim connectionString As String = "Data Source=localhost;Initial Catalog=AdventureWorks;" _
                    & "Integrated Security=true;"
    
            ' Create the command strings for querying the Contact table.
            Dim contactSelectCommand As String = "SELECT ContactID, Title, FirstName, LastName, EmailAddress, Phone FROM Person.Contact"
    
            ' Create the contacts data adapter.
            contactsDataAdapter = New SqlDataAdapter( _
                contactSelectCommand, _
                connectionString)
    
            ' Create a command builder to generate SQL update, insert, and
            ' delete commands based on the contacts select command. These are used to
            ' update the database.
            Dim contactsCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(contactsDataAdapter)
    
            ' Fill the data set with the contact information.
            contactsDataAdapter.Fill(dataSet, "Contact")
    
        Catch ex As SqlException
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    
  2. 在表單的 Load 事件處理常式中,將 DataGridView 控制項繫結至 BindingSource 元件並呼叫 GetData 方法,以便從資料庫中擷取資料。In the Load event handler of your form, bind the DataGridView control to the BindingSource component and call the GetData method to retrieve the data from the database. 是從連絡人DataTable的 LINQ to DataSet 查詢建立,然後再系結至BindingSource元件。 DataViewThe DataView is created from a LINQ to DataSet query over the Contact DataTable and is then bound to the BindingSource component.

    private void Form1_Load(object sender, EventArgs e)
    {
        // Connect to the database and fill the DataSet.
        GetData();
    
        contactDataGridView.DataSource = contactBindingSource;
    
        // Create a LinqDataView from a LINQ to DataSet query and bind it 
        // to the Windows forms control.
        EnumerableRowCollection<DataRow> contactQuery = from row in dataSet.Tables["Contact"].AsEnumerable()
                                                        where row.Field<string>("EmailAddress") != null
                                                        orderby row.Field<string>("LastName")
                                                        select row;
    
        contactView = contactQuery.AsDataView();
    
        // Bind the DataGridView to the BindingSource.
        contactBindingSource.DataSource = contactView;
        contactDataGridView.AutoResizeColumns();
    }
    
    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) _
                           Handles MyBase.Load
        ' Connect to the database and fill the DataSet.
        GetData()
    
        contactDataGridView.DataSource = contactBindingSource
    
        ' Create a LinqDataView from a LINQ to DataSet query and bind it 
        ' to the Windows forms control.
        Dim contactQuery = _
            From row In dataSet.Tables("Contact").AsEnumerable() _
            Where row.Field(Of String)("EmailAddress") <> Nothing _
            Order By row.Field(Of String)("LastName") _
            Select row
    
        contactView = contactQuery.AsDataView()
    
        ' Bind the DataGridView to the BindingSource.
        contactBindingSource.DataSource = contactView
        contactDataGridView.AutoResizeColumns()
    End Sub
    

另請參閱See also