如何:将 Windows 窗体 DataGrid 控件绑定到数据源

注意

DataGridView 控件取代了 DataGrid 控件并添加了功能;但是,可以选择保留 DataGrid 控件以实现向后兼容并供将来使用。 有关详细信息,请参阅 Windows 窗体 DataGridView 控件与 DataGrid 控件之间的区别

Windows 窗体 DataGrid 控件专门用于显示数据源中的信息。 可以通过调用 SetDataBinding 方法在运行时绑定控件。 尽管可显示来自各种数据源的数据,但最典型的源是数据集和数据视图。

以编程方式对 DataGrid 控件进行数据绑定

  1. 编写代码以填充数据集。

    如果数据源是基于数据集表的数据集或数据视图,请将代码添加到窗体以填充数据集。

    使用的确切代码取决于数据集获取数据的位置。 如果直接从数据库填充数据集,通常调用数据适配器的 Fill 方法,如以下示例所示,该示例填充名为 DsCategories1 的数据集:

    sqlDataAdapter1.Fill(DsCategories1)  
    
    sqlDataAdapter1.Fill(DsCategories1);  
    
    sqlDataAdapter1->Fill(dsCategories1);  
    

    如果数据集是从 XML Web 服务填充的,则通常会在代码中创建服务的实例,然后调用其中一个方法来返回数据集。 然后将 XML Web 服务中的数据集合并到本地数据集中。 以下示例显示了如何创建名为 CategoriesService 的 XML Web 服务实例,以及如何调用其 GetCategories 方法,并将生成的数据集合并到名为 DsCategories1 的本地数据集:

    Dim ws As New MyProject.localhost.CategoriesService()  
    ws.Credentials = System.Net.CredentialCache.DefaultCredentials  
    DsCategories1.Merge(ws.GetCategories())  
    
    MyProject.localhost.CategoriesService ws = new MyProject.localhost.CategoriesService();  
    ws.Credentials = System.Net.CredentialCache.DefaultCredentials;  
    DsCategories1.Merge(ws.GetCategories());  
    
    MyProject::localhost::CategoriesService^ ws =
       new MyProject::localhost::CategoriesService();  
    ws->Credentials = System::Net::CredentialCache::DefaultCredentials;  
    dsCategories1->Merge(ws->GetCategories());  
    
  2. 调用 DataGrid 控件的 SetDataBinding 方法,将数据源和数据成员传递给它。 如果不需要显式传递数据成员,请传递一个空字符串。

    注意

    如果是第一次绑定网格,可以设置控件的 DataSourceDataMember 属性。 但是,这些属性设置后,就无法重置。 因此,建议始终使用 SetDataBinding 方法。

    以下示例显示了如何以编程方式绑定到名为 DsCustomers1 的数据集中的 Customers 表:

    DataGrid1.SetDataBinding(DsCustomers1, "Customers")  
    
    DataGrid1.SetDataBinding(DsCustomers1, "Customers");  
    
    dataGrid1->SetDataBinding(dsCustomers1, "Customers");  
    

    如果 Customers 表是数据集中唯一的表,则也可以通过以下方式绑定网格:

    DataGrid1.SetDataBinding(DsCustomers1, "")  
    
    DataGrid1.SetDataBinding(DsCustomers1, "");  
    
    dataGrid1->SetDataBinding(dsCustomers1, "");  
    
  3. (可选)将适当的表格样式和列样式添加到网格中。 如果没有表格样式,你将看到表格,但是格式很简单,所有列都是可见的。

另请参阅