65.9K
CodeProject 正在变化。 阅读更多。
Home

数据绑定到 DataGridView 的不同方法

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.61/5 (15投票s)

2006年7月5日

CPOL

3分钟阅读

viewsIcon

138470

这段代码解释了生成用于 DataGridView 的数据源的不同方法。

Sample Image - datagridview.jpg

引言

这些代码片段展示了将数据绑定到 DataGridView 的不同方法。它将作为 ADO.NET 编程初学者的教程。该程序使用 C# 编写,在 Visual Studio 2005 中。

在 Visual Studio 2005 .NET 中,在 ASP 页面中显示表格的常用方法是拖放 DataGridView 控件到页面上,然后进行配置。见下图。

tutorial1.jpg

当我们配置数据源时,相应的代码会被添加到 ASP 页面的文件中,并在源文件中显示,如下所示

<asp:SqlDataSource ID="MydataSource" runat="server" 
      ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
      SelectCommand="SELECT AddressID, AddressLine1, City, 
                     PostalCode FROM Person.Address WHERE 
                     (AddressID < 15)">
</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" 
     DataMember="DefaultView" AutoGenerateColumns="False" 
     DataKeyNames="AddressID" DataSourceID="MydataSource">
  <Columns>
    <asp:BoundField DataField="AddressID" HeaderText="AddressID" 
        InsertVisible="False" ReadOnly="True" 
        SortExpression="AddressID" />
    <asp:BoundField DataField="AddressLine1" 
        HeaderText="AddressLine1" SortExpression="AddressLine1" />
    <asp:BoundField DataField="City" 
        HeaderText="City" SortExpression="City" />
    <asp:BoundField DataField="PostalCode" 
        HeaderText="PostalCode" SortExpression="PostalCode" />
  </Columns>
</asp:GridView>

数据字段是添加到控件的列。显示了 Select 命令,并且添加到 Web.Config 文件的连接字符串也在源文件中显示。

当我们运行页面时,我们会看到以下内容

tutorial3.jpg

目前,DataGridView 绑定到名为“MyDataSource”的数据源。(此数据源是在我们将网格视图拖放到页面上并进行配置时生成的。)

假设我们想从 DataGridView 控件中删除数据绑定;我们可以在按钮点击时编写以下代码,其中“GridView1”是 DataGridView

GridView1.DataSourceID = null;
GridView1.DataBind();

当点击按钮时,网格不再绑定到数据源。假设,我们想重新绑定控件;我们只需要说

GridView1.DataSource = MydataSource ;
GridView1.DataBind();

这将再次将数据绑定到源。此代码可以在按钮点击时执行。到目前为止,我们已经看到了如何连接到使用向导配置的数据源。

在某些情况下,我们会处理面向对象编程领域,在这种情况下,我们会这样做。我们公开相应类的方法以返回数据集或数据表。然后,我们将此数据集或数据表用作 DataGridView 的数据源。通常使用的技术是使用 SqlDataAdapter,我们将“连接字符串”和“Select”查询传递给它。一旦数据集或数据表可用,我们就在 ASP 代码隐藏中使用它作为数据源。

代码将类似于:

public class CDatabase
{ 
    public string myconnectionString = 
       " Data Source=KRISHNA;Initial " + 
       "Catalog=AdventureWorks;Integrated Security=True";
    public string myselectstr = "SELECT AddressID, AddressLine1," + 
       " City, PostalCode FROM Person.Address" + 
       " WHERE (AddressID between 15 and 20)";
    public SqlDataAdapter mydataadapter;
    public DataTable mydatatable = new DataTable();

    public CDatabase()
    {
        InitializeAdapter();
    }
    public void InitializeAdapter()
    {
        mydataadapter = new SqlDataAdapter(myselectstr, 
                new SqlConnection(myconnectionString)); 
    }
    public DataTable ReturnDataSetForQuery()
    {
        FillDataTable(); 
        return mydatatable;
    }
    public void FillDataTable()
    {
        mydataadapter.Fill(mydatatable);
    }
}

在这里,可以调用方法 ReturnDataSetForQuery ( ) 来返回数据表。可以从 web.config 文件直接读取连接字符串,并且可以将 Select 语句放置为存储过程,以提高系统效率。

在某些情况下,我们需要通过填充数组来绑定 DataGridView。这可能用于从用户获取数据,我们需要立即在数据网格中更新它的情况。我们这样做

我们创建一个类,并使用与 DataGridView 的数据字段匹配的参数。因此,通过 'get' 和 'set' 方法,我们可以设置参数,然后将项目数组作为数据源传递给网格视图。

public class Person
{
    private string _AddressID;
    private string _AddressLine1;
    private string _City;
    private string _PostalCode;
 
    public Person(string addrid, string addlin1,
                  string cit, string pscode)
    {
        _AddressID = addrid ;
        _AddressLine1 = addlin1 ;
        _City = cit;
        _PostalCode = pscode ;
    } 
 
    public string AddressID
    {
        get
        {
            return _AddressID;
        }
        
    }
     
    public string AddressLine1
    {
        get
        {
            return _AddressLine1;
        }
    }

    public string City
    {
        get
        {
            return _City;
        }
      
    }
 
    public string PostalCode
    {
        get
        {
            return _PostalCode;
        }
      
    }
}

我们可以通过类似于以下的代码创建一个这样的类类型的对象数组

Person[] persarray = new Person[4];
      
persarray[0] = new Person("100", "addressline100", "delhi", "110048");
persarray[1] = new Person("101", "addressline101", "bombay", "334243");
persarray[2] = new Person("102", "addressline102", "calcutta", "343234");
persarray[3] = new Person("103", "addressline103", "chennai", "638002");
 
GridView1.DataSource = null;
GridView1.DataSourceID = null;
 
GridView1.DataSource = persarray;
GridView1.DataBind();

将数据绑定到网格视图的另一种方法是读取由其他类或应用程序生成并将其用作数据源的 XML 文件。以下类具有写入 XML 文件的功能

public class WriteXML :  CDatabase 
{
    public WriteXML()
    {
        InitializeAdapter();
    }
    public void WriteIntoXmlFile()
    {
        FillDataTable();
        mydatatable.TableName = "datatable";
        mydatatable.WriteXml("C:\\xmlfile");
    }
}

XML 表格看起来类似于

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <datatable>
    <AddressID>15</AddressID>
    <AddressLine1>4912 La Vuelta</AddressLine1>
    <City>Bothell</City>
    <PostalCode>98011</PostalCode>
  </datatable>
  <datatable>
    <AddressID>16</AddressID>
    <AddressLine1>40 Ellis St.</AddressLine1>
    <City>Bothell</City>
    <PostalCode>98011</PostalCode>
  </datatable>
  <datatable>
    <AddressID>17</AddressID>
    <AddressLine1>6696 Anchor Drive</AddressLine1>
    <City>Bothell</City>
    <PostalCode>98011</PostalCode>
  </datatable>

类似地,我们可以将 XML 文件读入数据集,然后将其用作数据源。当另一个应用程序生成数据时,可能会发生这种情况,我们可能希望将其读入 XML。对于读取 XML,我们使用 ReadXml 函数。然后返回的数据集将用作数据源。

public DataSet ReadXMLandReturnTable()
{
    DataSet mydatatable = new DataSet();
    mydatatable.ReadXml("C:\\xmlfile");
    return mydatatable;
}
© . All rights reserved.