1、数据源控件DataSourceControl15.1GridView控件15.2DetailsView控件15.3主从结构数据15.4树形结构数据15.5思考题15.6DataSourceControl类是数据源控件的基类,它是一个抽象类。ASP.NET自带了多种DataSourceControl类的子类以完成对特定数据源的连接,这些类(控件)包括SqlDataSource、AccessDataSource和XmlDataSource,它们分别可以连接关系型数据库、Access数据文件和XML文件。名称名称说明说明GetView获取与数据源控件关联的数据源视图。GetViewNames获取数据
2、源视图名称的集合。RaiseDataSourceChangedEvent引发DataSourceChanged事件。配置数据源在弹出的“添加连接”对话框中,单击以下选项之一:l Microsoft SQL Server:通过.NET Framework数据提供程序连接到Microsoft SQL Server。l Microsoft SQL数据库文件:可将一个数据库文件附加到SQL Server的本地实例(包括Microsoft SQL Express实例)。l Microsoft Access数据库文件:可使用本机Jet提供程序连接到Access数据库。l Microsoft ODBC数据源
3、:可连接到 ODBC 驱动程序。l Oracle数据库:可连接到Oracle数据库服务器中。得到一个数据库连接字符串,该字符串将作为一个参数存放在Web.config文件中。创建了SELECT语句的基础之后,还可以单击以下任一选项进一步自定义查询:l“Where”:设置筛选条件,即SELECT语句中的WHERE子句;l“ORDER BY”:设置排序顺序,即SELECT语句中的ORDER BY子句;l“高级”:生成 INSERT、UPDATE 和DELETE 语句。继续使用前文在介绍DataReader时使用过的Repeater控件。首先,将Repeater控件拖动到页面上;打开ASPX源代码中
4、进行编辑,在所形成的标签中,放置不参与迭代(只显示一次)的子元素作为开始、子元素作为结束;插入用来迭代显示数据行的子元素,其中包含了“简称”和“全称”的输出语句;回到可视化的视图,点击Repeater控件,选择数据源为“MyDataSource”,即之前配置好的数据源控件ID。可视化配置到这里就可以进行测试了。当网页被打开时,数据库会被连接,SQL语句会被执行,返回的数据集会被绑定到Repeater控件,网页中将呈现所有满足条件的数据。虽然通过可视化的配置可以完成全部的数据连接和绑定输出的任务,但我们还是可以通过编写代码在程序运行时重新连接和绑定。为此,我们在网页中放置一个“重新绑定Repea
5、ter控件”的按钮,当用户在网页中点击此按钮时,将执行下面事件响应函数:protected void btRepeater_Click(object sender,EventArgs e)Repeater1.DataSource=MyDataSource;Repeater1.DataBind();SQL语句和存储过程在运行时可以包括参数,参数是往往来自用户的输入或选择。比如,但查询数据时,用户可以通过文本框指定查询条件。使用SqlDataSource控件时,可以编写带参数的SQL语句。参数可以提供用于数据检索的搜索条件,或者提供要进行数据插入、更新或删除的值,还可以提供用于排序、分页和筛选规则
6、。在配置数据源时,可以通过“WHERE”按钮来设置SELECT语句的参数。在“添加WHERE子句”对话框中,可以选择“列”、“运算符”以及“源”,然后点击“添加”按钮,可以继续输入其它参数。参数输入后,数据源控件中SelectQuery属性中将保存如下的SQL语句:SELECT*FROM tb_客户 WHERE(简称=简称)上述设置方式只是在最初配置数据源时可以使用。通常在开发时,需要不断修改SQL语句以及其中的参数设置,因此,需要通过SelectQuery、InsertQuery、DeleteQuery和UpdateQuery等属性来分别配置增删改查的参数。这些属性可以在开发界面中的属性表中
7、点击设置。下面给出事件处理函数“btSelect_Click”的代码:protected void btSelect_Click(object sender,EventArgs e)MyDataSource.SelectParameters简称.DefaultValue=tbShortForSelect.Text;如果用户希望能够进行一定程度的“模糊查询”,不如只输入“华”,希望能够查询到“简称”中带有该字符串的客户。因此,需要通过SelectQuery属性,进入“命令和参数编辑器”对话框,修改SELECT语句如下:SELECT*FROM tb_客户 WHERE(简称 like%+简称+%)可
8、以在“配置数据源”对话框进行SELECT语句设置时点击“高级”按钮,进入“高级SQL生成选项”对话框。INSERT INTO tb_客户(简称,全称,行业,地址,邮编,座机,手机,联系人,创建时间,修改时间,备注)VALUES(简称,全称,行业,地址,邮编,座机,手机,联系人,创建时间,修改时间,备注)DELETE FROM tb_客户 WHERE 客户ID=客户IDUPDATE tb_客户 SET 简称=简称,全称=全称,行业=行业,地址=地址,邮编=邮编,座机=座机,手机=手机,联系人=联系人,创建时间=创建时间,修改时间=修改时间,备注=备注 WHERE 客户ID=客户IDGridVie
9、w控件是ASP.NET数据绑定控件的“集大成者”,它可以方便地显示和编辑数据源中的值。在GridView控件中,每列表示一个字段,每行表示一条记录。l绑定至数据源控件,比如可以通过选择数据源而绑定到一个SqlDataSource数据源控件上,并充分利用数据源控件中的SQL语句来实现数据的查询、删除和修改功能。l提供排序功能,用户可以通过点击表头来根据这一列进行排序。l提供删除功能,用户通过点击某一行中的删除链接即可实现对该行的删除。l提供更新功能,用户点击更新链接后,该行中的字段将变为可编辑状态。l提供分页功能,开发者可以设置每页显示的数据行数。l提供行选择功能,通过选择功能可以方便地实现主从
10、表的结构。l可用编程方式访问GridView对象模型以动态设置属性、处理事件等。l可以在一个列中包含多个字段的值。l可以设计出带有超链接的列。l可以通过主题和样式进行外观的设计。在网页的“设计”视图中,将一个SQLDataSource数据源控件从“工具箱”面板拖到网页上,命名为“MyDataSource”。右键单击该控件,然后单击“配置数据源”。在弹出的“配置数据源”对话框中配置数据的增、删、改、查等SQL代码。增删改查对应的SQL语句如下:INSERT INTO tb_客户(简称,全称,行业,地址)VALUES(简称,全称,行业,地址)DELETE FROM tb_客户 WHERE 客户ID
11、=客户IDUPDATE tb_客户 SET 简称=简称,全称=全称,行业=行业,地址=地址 WHERE 客户ID=客户IDSELECT 客户ID,简称,全称,行业,地址 FROM tb_客户将一个GridView控件从“工具箱”面板拖到网页上,点击该控件弹出“GridView任务”选项。选择数据源为上一步配置好的数据源控件“MyDataSource”,选择“启用分页”、“启用排序”、“启用编辑”、“启用删除”和“启用选定内容”选项。点击“编辑列”功能,可以进入“字段”对话框进一步设置每一列的各种属性。在本例中,我们只对列的宽度进行了修改。DetailsView控件用一个表来显示数据源中的单条记
12、录,其中这条记录的每个字段分别显示在一行中。DetailsView控件支持下列功能:l 可以绑定至数据源控件,如SqlDataSource。l 提供数据插入功能。l 提供数据更新和删除功能。l 提供分页功能。l 以编程方式访问DetailsView对象模型以动态设置属性、处理事件等。l 可通过主题和样式进行自定义的外观。构建一个GridView控件用来显示所有数据,并提供“选择”单条数据的超链接。在网页的“设计”视图中,将一个SQLDataSource数据源控件从“工具箱”面板拖到网页上,设置名为“MyDataSource1”。SELECT 客户ID,简称 FROM tb_客户将一个GridV
13、iew控件从“工具箱”面板拖到网页上,设置名为“GridView1”。点击该控件弹出“GridView任务”选项。选择数据源为上一步配置好的数据源控件“MyDataSource1”,选择“启用分页”和“启用选定内容”选项。SELECT 客户ID,简称,全称,行业,地址,邮编,座机,手机,联系人,创建时间,修改时间,备注 FROM tb_客户 WHERE(客户ID=客户ID)INSERT INTO tb_客户(简称,全称,行业,地址,邮编,座机,手机,联系人,创建时间,修改时间,备注)VALUES(简称,全称,行业,地址,邮编,座机,手机,联系人,创建时间,修改时间,备注)DELETE FROM
14、 tb_客户 WHERE 客户ID=客户IDUPDATE tb_客户 SET 简称=简称,全称=全称,行业=行业,地址=地址,邮编=邮编,座机=座机,手机=手机,联系人=联系人,创建时间=创建时间,修改时间=修改时间,备注=备注 WHERE 客户ID=客户ID设置DetailsView的参数设置DataKeyNames属性的参数使用两个SQLDataSource数据源控件,第一个数据源控件直接从数据库的表中获取了全部的客户数据,而第二个数据源控件则是根据第一个控件所关联的GridView控件的当前选择,动态地修改SELECT语句中的参数值,到达联动的效果。这种数据之间的关系在数据库应用系统中称
15、为“主从关系”(Master-Slave)。用户在某个一级分类中点击“选择”按钮时,将显示属于此一级分类的所有二级分类。TreeView控件用于在树形结构中显示分层数据,例如目录或文件目录,并且支持下列功能:l 数据绑定,它允许控件的节点绑定到XML、表格或关系数据。l 站点导航,通过与SiteMapDataSource控件集成实现。l 节点文本既可以显示为纯文本也可以显示为超链接。l 借助编程方式访问TreeView对象模型以动态地创建树、填充节点、设置属性等。l 客户端节点填充(并非全部浏览器都支持此功能)。l 能够在每个节点旁边显示复选框。l 可通过主题、用户定义的图像和样式自定义外观。
16、TreeView控件由节点组成。树中的每个项都被称为一个节点,由TreeNode对象表示。节点类型的定义如下:l 包含其他节点的节点称为“父节点”。l 被其他节点包含的节点称为“子节点”。l 没有子节点的节点称为“叶节点”。l 不被其他任何节点包含同时是所有其他节点的上级的节点是“根节点”。TreeView控件的最简单的数据模型是静态数据。在设计时,我们可以通过可视化的方式给出树形结构中的节点。在本例中,我们可以用这种方法生成根节点“产品分类”。拖放一个TreeView控件到网页中,弹出“TreeView任务”框。指定TreeView控件OnTreeNodePopulate事件对应的处理函数,
17、对应的代码如下:protected void tvCatalog_TreeNodePopulate(object sender,TreeNodeEventArgs e)if(e.Node.ChildNodes.Count=0)switch(e.Node.Depth)case 0:PopulateC1(e.Node);break;case 1:PopulateC2(e.Node);break;PopulateOnDemand属性值为true,即该节点在展开时动态添加子节点,SelectAction属性值为Expand,即该节点在用户点击时将展开或关闭。private void PopulateC
18、1(TreeNode node)SqlCommand sqlQuery=new SqlCommand(SELECT 产品一级分类ID FROM tb_产品一级分类 ORDER BY 显示顺序);DataSet resultSet;resultSet=RunQuery(sqlQuery);if(resultSet.Tables.Count 0)foreach(DataRow row in resultSet.Tables0.Rows)TreeNode NewNode=new TreeNode(row产品一级分类ID.ToString(),row产品一级分类ID.ToString();NewNod
19、e.PopulateOnDemand=true;NewNode.SelectAction=TreeNodeSelectAction.Expand;node.ChildNodes.Add(NewNode);private void PopulateC2(TreeNode node)SqlCommand sqlQuery=new SqlCommand();sqlQuery.CommandText=SELECT 产品二级分类ID FROM tb_产品二级分类 WHERE(产品一级分类ID=产品一级分类ID)ORDER BY 显示顺序;sqlQuery.Parameters.Add(产品一级分类ID,
20、SqlDbType.NVarChar).Value=node.Value;DataSet ResultSet=RunQuery(sqlQuery);if(ResultSet.Tables.Count 0)foreach(DataRow row in ResultSet.Tables0.Rows)TreeNode NewNode=new TreeNode(row产品二级分类ID.ToString(),row产品二级分类ID.ToString();NewNode.PopulateOnDemand=false;NewNode.SelectAction=TreeNodeSelectAction.Select;node.ChildNodes.Add(NewNode);(1)可视化数据源控件DataSourceControl类与Connection对象、Command对象、DataReader对象的有什么关系?(2)通过实际开发,完成配置数据源的过程,生成SELECT、INSERT、UPDATE和DELETE语句。(3)通过实际开发,使用GridView控件展示数据库中一个表的数据,并提供数据的修改和删除功能。(4)通过实际开发,使用GridView控件实现数据库中主从表数据的展示。