首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

使用数据绑定控件

Working with Data-Bound Controls

让我们再来看一种与此不同更具声明性的方式。创建一个新的Windows Forms Solution(称之为DeclarativeDataDisplay)。先扩大窗体,将其重新命名为DeclarativeDB.cs,将其标题改为Declarative Data Base。拖放一个DataGridView到窗体上。

就位后,会出现一个Action菜单。点击下拉菜单,选择一个数据源。点击Add Project Data Source,打开Data Source Configuration Wizard。点击Next,选择数据类型,如图14-3所示。

图14-2:使用OLE DB托管提供程序

图14-3:Data Source Configuration Wizard

点击Database并点击Next。在Data Source Configuration Wizard中,点击New Connection,如图14-4。

为Connection Properties填入相应的信息,如图14-5所示。

图14-4:选择一个数据连接

图14-5:设置连接属性

在点击OK之前,一定要点击Test Connection按钮。在下一个选项卡,选中"Yes, save the connection as"和"Include sensitive data",如图14-6所示。

图14-6:保存敏感数据

将显示所选DataSet的内容。在这里,打开表,打开Customers表。选择除Region之外的所有列(这是为了说明查询不需要返回所有列),并点击Finish。

点击数据网格的选项卡,选择Edit Columns。编辑列标题为有意义的文字,如图14-7所示。

返回程序。已经绑定了数据,如图14-8所示。

查看数据窗格下面的对象栏中,能够发现三个对象:northwindDataSet,CustomerData- Connector和customersTableAdapter,如图14-9所示。

其中每个对象都可以通过点击对象然后在Properties窗口中设置属性。

编程填充DataGrid

Populating a DataGrid Programmatically

如果非要坚持手工创建这些连接,当然是可行的,还可以手工地将它们与数据窗格连接起来。

创建一个名为ProgrammaticDataDisplay的项目,重命名.cs文件和窗体,并相应地设置标题。将一个DataGridView拖放到位,但是忽略掉Action菜单。

图14-7:编辑列

图14-8:实际中的数据窗格

右击窗体,选择View Code。在构造方法中添加如下行代码:

string connectionString = "server=localhost;" +

"Trusted_Connection=yes; database=northwind";

string commandString =

    "Select CompanyName, ContactName, ContactTitle, "

    + "Phone, Fax from Customers";

// 创建一个数据集并填充它

SqlDataAdapter DataAdapter =

    new SqlDataAdapter( commandString, connectionString );

图14-9:查看对象栏中的对象

DataSet DataSet = new DataSet( );

DataAdapter.Fill( DataSet, "Customers" );

// 将DataSet与窗格绑定

dataGridView1.DataSource =

    DataSet.Tables["Customers"].DefaultView;

这里,手工设置了连接字符串和命令字符串,然后创建了一个SqlDataAdapter和DataSet获取数据。接下来将dataGridView的DataSource属性绑定到被检索的Customers的DefaultView。

通过编程或者声明设置DataGridView的属性都可以,而且可以混合使用两种方式。但是显然,Microsoft已经花了很大的功夫,才实现了只需在窗体上拖放数据库连接控件,这使与ADO.NET的互操作大大简化了。

定制DataSet

Customizing the DataSet

我们可以精确地控制创建DataSet的方方面面,不用默认设置。同样,也可以通过编程和声明两种方式。

上例中,创建DataSet的时候,传入了一个commandString和一个connectionString:

SqlDataAdapter DataAdapter =

   new SqlDataAdapter(commandString, connectionString);

它们在系统内部将分别赋值给一个SqlCommand对象和一个SqlConnection对象。也可以显式地创建这些对象:

下例中,将给出4个新的类成员:

private System.Data.SqlClient.SqlConnection myConnection;

private System.Data.DataSet myDataSet;

private System.Data.SqlClient.SqlCommand myCommand;

private System.Data.SqlClient.SqlDataAdapter DataAdapter;

连接是通过用连接字符串实例化SqlConnection对象实现的:

string connectionString = "server=(local)\\NetSDK;" +

    "Trusted_Connection=yes; database=northwind";        

myConnection = new System.Data.SqlClient.SqlConnection(connectionString);

然后显式地打开连接:

myConnection.Open(  );

通过保持此连接,可以重用它(下例中可以看到),必要时还可以使用它的事务支持。

提示:也可以允许DataAdapter创建连接,然后显式打开它,或者使用类似于如下的代码保存一个指向它的引用:

SqlConnection myConnection = myAdapter.Connection

接下来显式创建DataSet对象并设置它的一个属性。

myDataSet = new System.Data.DataSet(  );

myDataSet.CaseSensitive=true;

将CaseSensitive设为true,表示DataTable对象中的字符串比较是区分大小写的。

接下来,显式创建SqlCommand对象,并将连接对象赋给新的命令对象和命令文本:

myCommand = new System.Data.SqlClient.SqlCommand(  )

myCommand.Connection=myConnection;

myCommand.CommandText = "Select * from Customers";

最后,创建SqlDataAdapter对象并将其赋值给刚才生成的SqlCommand对象,告诉DataSet如何映射表列,使用正在搜索的表,同时让SqlDataAdapter填充DataSet对象。

DataAdapter = new System.Data.SqlClient.SqlDataAdapter();

DataAdapter.SelectCommand= myCommand;

DataAdapter.TableMappings.Add("Table","Customers");

DataAdapter.Fill(myDataSet);

完成后,就可以填充DataGridView了(注意这一次DataGrid使用了默认名):

dataGrid1.DataSource=

    myDataSet.Tables["Customers"].DefaultView;

示例14-3 提供了完整的源代码。

示例14-3:定制DataSet

#region Using directives

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Windows.Forms;

#endregion

namespace CustomizedDataSet

{

   partial class CustomizedDataSet : Form

   {

      private System.Data.SqlClient.SqlConnection myConnection;

      private System.Data.DataSet myDataSet;

      private System.Data.SqlClient.SqlCommand myCommand;

      private System.Data.SqlClient.SqlDataAdapter DataAdapter;

      public CustomizedDataSet( )

      {

         InitializeComponent( );

         string connectionString = "server=localhost;" +

            "Trusted_Connection=yes; database=northwind";

         myConnection = new

            System.Data.SqlClient.SqlConnection( connectionString );

         myConnection.Open( );

         // 创建DataSet并设置一个属性

         myDataSet = new System.Data.DataSet( );

         myDataSet.CaseSensitive = true;

         // 创建SqlCommand对象并赋予

         // 连接和查询语句

         myCommand = new System.Data.SqlClient.SqlCommand( );

         myCommand.Connection = myConnection;

         myCommand.CommandText = "Select * from Customers";

         // 创建DataAdapter对象

         // 并传入SQL Command对象,建立表映射

         DataAdapter = new System.Data.SqlClient.SqlDataAdapter( );

         DataAdapter.SelectCommand = myCommand;

         DataAdapter.TableMappings.Add( "Table", "Customers" );

         // 让DataAdapter对象填充DataSet

         DataAdapter.Fill( myDataSet );

示例14-3:定制DataSet(续例)

         // 在窗格中显示

         dataGridView1.DataSource =

            myDataSet.Tables["Customers"].DefaultView;

      }

   }

}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论