ADO.NET #5,自己设定画面,让SqlDataSource帮我们捞(呈现)数据
http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/22/sqldatasource_select_0922.aspx
本文内容需要具备一些基础,不建议初学者观赏。
本范例采用的 test数据表,与本书范例相同,这些范例来不及在书上发表,如今在网络上为读者介绍,当成售后服务。
请您具备本书 GridView第九章、ADO.NET第十三&十四章的基础后,才来观摩本范例。
已经购买本书的读者,这几个范例,可以当成书本 14.2节 的后续补充文章。 希望对大家有帮助。
前 言
一般来说,我们提到 SqlDataSource或是AccessDataSource,都是透过 GridView / ListView这种大型的、多功能的「数据系结控件」。
因为两者搭配(DataSource控件 + 数据系结控件),有方便的精灵画面,一步一步完成后,就OK啦。
简单又方便、功能又强大。各位可以简单的看看我写的这篇文章(PDF檔).....文章下载。
但是,如果客户不想用固定的样版,非得自己设计不可。
想用其它的 Web控件来组合、展示数据,例如:TextBox、Label这些简单的Web控件,该怎么作呢?
这种简单型的Web控件,就要自己动动手写一点程序,才能完成!
上一篇文章,我们已经完成「新增(Insert)」数据的范例,
现在我们将要利用「SqlDataSource帮我们完成的 Select指令」,自己设定 [数据输出] 的画面。
这个范例在MSDN文件上找不到,因为SqlDatasource的 Selecting事件没范例,所以我整理一下分享出来。
先看看执行成果吧(画面如下),
当我们点选 DropDownList 的文章标题,
底下的几个 Label / TextBox控件,就会出现这篇文章 各个字段的内容。
---------------------------------------------------------------------------------------------------------------------------------
这个范例,我们同时以 DataReader与 DataSet 两种方法来撰写(共有两支程序)。
如果您不懂 ADO.NET、DataReader与 DataSet.....请看看这篇文章-- 初探ADO.NET #2,DataReader 与 DataSet(资料集)
---------------------------------------------------------------------------------------------------------------------------------
动手写程序 ---- 完成上面的基础观念后,我们开始写程序
1. HTML画面设计。
上方,我们使用 DropDownList控件 + SqlDatasource(名为SqlDataSource_dropdownlist)。完整设定画面,可以参考本书 9.4节(P.9-46页),这是很入门的基础设定(或参考下图)。
下方,有一个 Label控件、数个 TextBox控件,拉进来就好,不特别。
最下方还有一个 SqlDataSource1,这个满重要的!我整本书的第九章,都在练习这个设定。请看本书9.5.1节,SqlDataSource的「WHERE」子句,这里设定很重要,学会了可以有很多变化。
(以DataReader 来写,先把 SqlDataSource1的 DataSourceMode属性设定为 DataReader)
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
HTML画面原始码如下( .aspx档案)(DataReader版):
01 <asp:DropDownList ID="DropDownList1" runat="server"
02 AutoPostBack="True" DataSourceID="SqlDataSource_dropdownList" DataTextField="title"
03 DataValueField="id">
04 </asp:DropDownList>
05 </span>
06 <asp:SqlDataSource ID="SqlDataSource_dropdownList" runat="server"
07 ConnectionString="<%$ ConnectionStrings:testConnectionString1 %>"
08 SelectCommand="SELECT [id], [title] FROM [test]"></asp:SqlDataSource>
09 <br class="style3" />
10 <span class="style3">文章的详细内容,会出现在下面的控件</span><br class="style3" />
11 <br />
12 id ----<asp:Label ID="Label_id" runat="server"></asp:Label>
13 <span class="style1"> <span class="style5">[DataReader版]</span></span><br />
14 <br />
15 Title----<asp:TextBox ID="TextBox_title" runat="server"></asp:TextBox>
16 <br />
17 <br />
18 Summary--<asp:TextBox ID="TextBox_summary" runat="server"></asp:TextBox>
19 <br />
20 <br />
21 Article--<asp:TextBox ID="TextBox_article" runat="server" Height="150px"
22 TextMode="MultiLine" Width="480px"></asp:TextBox>
23 <br />
24 <br />
25 Author--<asp:TextBox ID="TextBox_author" runat="server"></asp:TextBox>
26 <asp:SqlDataSource ID="SqlDataSource1" runat="server"
27 ConnectionString="<%$ ConnectionStrings:testConnectionString1 %>"
28
29 SelectCommand="SELECT [id], [title], [summary], [article], [author] FROM [test]WHERE ([id] = @id)"
30 DataSourceMode="DataReader" >
31 <SelectParameters>
32 <asp:ControlParameter ControlID="DropDownList1" Name="id"
33 PropertyName="SelectedValue" Type="Int32" />
34 </SelectParameters>
35 </asp:SqlDataSource>
---------------------------------------------------------------------------------------------------------------------------------
2. 后置程序代码 (第一支程序,DataReader版)
- 重点---- 10~11行,用 IDataReader接住「捞出来的数据」,再由其它Web控件来呈现。
- 必须用 .Read() 进行读取,才会成功(这是DataReader的特性)
01 Protected Sub DropDownList1_SelectedIndexChanged() SubDropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)HandlesDropDownList1.SelectedIndexChanged
02 SqlDataSource1.DataSourceMode= SqlDataSourceMode.DataReader
03 '== 如果 DataSourceMode 属性设为 DataReader 值,则会传回 IDataReader 物件。
04 '== 当完成读取数据时,请关闭 IDataReader 对象。
05
06 Dim args As New DataSourceSelectArguments
07 '== DataSourceSelectArguments 提供一项机制,让数据系结控件于撷取数据时,
08 '== 用来向数据来源控件要求数据相关的作业。
09
10 Dim I_DR As IDataReader =CType(SqlDataSource1.Select(args), IDataReader)
11
12 I_DR.Read() '***** 重点!! *****
13
14 Label_id.Text =I_DR.Item("id").ToString()
15 TextBox_title.Text =I_DR.Item("title").ToString()
16 TextBox_summary.Text =I_DR.Item("summary").ToString()
17 TextBox_article.Text =I_DR.Item("article").ToString()
18 TextBox_author.Text =I_DR.Item("author").ToString()
19
20 '== 当完成读取数据时,请关闭 IDataReader 对象。
21 I_DR.Close()
22 I_DR.Dispose()
23 End Sub
====================================================================
后置程序代码 (第二支程序,DataSet版)
- 倘若要改成 DataSet的写法, 上一个步骤的HTML画面(.aspx档案)。先把 SqlDataSource1的 DataSourceMode属性设定为 DataSet
- 重点----用 DataView接住「捞出来的数据」,再由其它Web控件来呈现。
01 Protected Sub DropDownList1_SelectedIndexChanged() SubDropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles DropDownList1.SelectedIndexChanged
02 Dim args As New DataSourceSelectArguments
03 '== DataSourceSelectArguments 提供一项机制,让数据系结控件于撷取数据时,
04 '== 用来向数据来源控件要求数据相关的作业。
05
06 Dim dv As DataView =CType(SqlDataSource1.Select(args), DataView)
07
08 Label_id.Text =dv.Table(0).Item("id").ToString
09 TextBox_title.Text =dv.Table(0).Item("title").ToString()
10 TextBox_summary.Text =dv.Table(0).Item("summary").ToString()
11 TextBox_article.Text =dv.Table(0).Item("article").ToString()
12 TextBox_author.Text =dv.Table(0).Item("author").ToString()
13
14 dv.Dispose()
15 End Sub
---------------------------------------------------------------------------------------------------------------------------------
程序执行画面如下:
当我们点选 DropDownList 的文章标题,
底下的几个 Label / TextBox控件,就会出现这篇文章 各个字段的内容。
---------------------------------------------------------------------------------------------------------------------------------
本文介绍的两个程序,请由此下载----Sample_2.rar
很多基础的东西,如果您看不懂,可能是一些基础还不稳固。
本文是补齐书本内的不足、也是本书的售后服务,(假设本文的读者已经有基础、或是看完本书了)因此很多基础设定都跳过去了,请见谅。
后 记
自从ASP.NET 2.0面市以来,因为新功能太多了(介绍不完),很少有书本会介绍 ADO.NET,
大多以 SqlDatasource或 AccessDataSource来解说。
甚至有人说:「SqlDataSource已经取代 ADO.NET」(大错特错的说法!)
ADO.NET才是 .NET数据存取的核心,地位等同于以前ASP时代的「ADO」,不可能被取代。
只会使用 SqlDataSource现成的设定、精灵,一下子就遇见瓶颈了。
很多讨论区都有类似的问题,初学者学会一些VS 2005/2008/2010的操作后,终究还是得面临ADO.NET的实作!
要更进一步提升功力,还是要了解ADO.NET观念、动手实作!
我出版的书,对于ADO.NET观念(第十三章) 与 手写ADO.NET程序(第十四章),
花了两大章去介绍各种范例(合计124页),是一大特点。希望对大家有帮助。
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
本系列共有下面文章:
- 初探ADO.NET #1,程序与数据库互动的四大步骤 (2010-10-20 08:55)
- 初探ADO.NET #2,DataReader 与 DataSet(资料集) (2010-10-20 08:58)
- ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 (2010-10-22 10:04)(难度很高,初学者请略过)
- ADO.NET #4,自己设定输入画面,让SqlDataSource帮我们完成「新增」一笔数据 (2010-10-22 13:55)
- ADO.NET #5,自己设定画面,让SqlDataSource帮我们捞(呈现)数据
- [习题]ADO.NET #6, DataSet如何新增一笔数据?
- [习题]ADO.NET #7,避免相同数据 重复输入(重复新增)
- [习题]ADO.NET #8,文章(产品)的浏览次数 / 点阅数 / 点击次数,怎么作?
- ......文章 仍在增加中......
范例:
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)