把之前的範例,改成 Repeater來呈現畫面而已。
變動不大。僅供參考。
這個範例,是從這篇文章稍作變化而來:
[習題]上集 Ch 14-4 撰寫ADO.NET DataReader的分頁程式#1(搭配SQL指令 ROW_NUMBER)
(1). 簡單地說,修改的地方只有在「第三步驟」,把資料呈現在畫面上。
我們在此使用 Repeater or ListView來呈現。 (執行成果 如下圖)
而不是上一個範例 必須自己一列一列慢慢寫程式的 While.....End While方式 (這種作法主要是搭配美工人員的HTML)。
HTML設計畫面如下:
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<div align="center">
<table border="1" width="90%">
<tr>
<td><b>id</b></td>
<td><b>Date & Time</b></td>
<td><b>Title</b></td>
<td><b>Summary</b></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><small> <%#DataBinder.Eval(Container.DataItem, "id")%> </small></td>
<td><small> <%#DataBinder.Eval(Container.DataItem, "test_time", "{0:yyyy/MM/dd}")%> </small></td>
<td> <b><%#DataBinder.Eval(Container.DataItem, "title")%> </b></td>
<td align="left"> <small><%# DataBinder.Eval(Container.DataItem, "summary") %> </small></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</div>
</FooterTemplate>
</asp:Repeater>
(2). 另外,我發現原本的SQL指令有一個 Bug,在此作了修正。
其餘程式都沒變化。謝謝。
=======================================================================
Imports System.Data
Imports System.Data.SqlClient
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim haveRec = False
Dim p As String = Request("p")
Dim Conn As SqlConnection = New SqlConnection("你的資料庫連結字串;MultipleActiveResultSets=True")
'-- 使用多重結果集(MARS)
Conn.Open()
Dim cmd As SqlCommand = New SqlCommand("select count(id) from test", Conn)
'---每頁展示 5筆資料
Dim PageSize As Integer = 5
Dim RecordCount As Integer = CType(cmd.ExecuteScalar().ToString, Integer)
cmd.Cancel()
If RecordCount = 0 Then
Response.Write("<h2>抱歉!無法找到您需要的資料!</h2>")
Conn.Close()
Response.End()
End If
Dim Pages As Integer = 0
Pages = ((RecordCount + PageSize) - 1) \ PageSize
If IsNumeric(Request("p")) Then
If Request("p") <> "" And CInt(Request("p")) > 0 And CInt(Request("p")) <= Pages Then
p = CInt(Request("p"))
Else
p = 1
End If
Else
p = 1
End If
Dim NowPageCount As Integer = 0
If (p > 0) Then
NowPageCount = (p - 1) * PageSize
End If
Response.Write("<h3>搜尋資料庫: (共計" & RecordCount & "筆 / 共需" & Pages & "頁)</h3>")
Response.Write("<hr width='97%' size='1'>")
Dim dr As SqlDataReader = Nothing
'-- 註解: 2011/5/20,以下的程式略有修改。
Dim SqlStr As String = "Select test_time, id, title, summary
from (select ROW_NUMBER() OVER(ORDER BY id) AS 'RowNo', * from test) as t
where t.RowNo between @A and @B"
'==SQL指令的 ROW_NUMBER。參考資料: http://technet.microsoft.com/zh-tw/library/ms186734.aspx
Dim cmd1 As SqlCommand = New SqlCommand(SqlStr, Conn)
cmd1.Parameter.AddWithValue("@A", (NowPageCount+1) )
cmd1.Parameter.AddWithValue("@B", (NowPageCount + PageSize))
dr = cmd1.ExecuteReader()
If dr.HasRows Then
haveRec = True
'*** 第三,自由發揮,透過 Repeater呈現畫面。 ****
Repeater1.DataSource = dr
Repeater1.DataBind()
'******************************************** 如果您想改成 ListView or GridView,都行!!
End If
'--- 如果您想要 C# 版範例,請打開 C#書本「上集」(光碟裡面有這支程式的原版)。拿他來改,修改幅度很小。
'--- 如果連這麼小幅度的修改(從 VB改成 C#)都作不到.....那就 Orz...
'--- 請看本文後續發展: [給讀者的話]軟土深掘
While (dr.Read())
haveRec = True
html_sb.Append("<tr><td WIDTH='12%' valign=top><font size='2' color=#800000>★(" & dr.Item("test_time").ToString() & ")</font></td>")
html_sb.Append("<td WIDTH='88%'><a href='Default_Disp.aspx?id=" & dr.Item("id").ToString() & "'><b>" & dr.Item("title").ToString() & "</b></a></td></tr>")
html_sb.Append("<tr><td WIDTH='12%'></td><td WIDTH='88%'><font color='#666666' size='2'>" & dr.Item("summary").ToString() & "</font></td></tr>")
html_sb.Append("<tr><td colspan='2' height='12'> </td></tr>")
End While
html_sb.Append("</table>")
If (haveRec) Then
Response.Write(html_sb.ToString())
If (Pages > 0) Then
Response.Write("<div align='center'>")
If (p > 1) Then
Response.Write("<a href='Advanced_Page_10_mis2000lab_DataReader_Row_Number.aspx?p=" & (p - 1) & "'>[<<<上一頁]</a>")
End If
Response.Write(" <b><a href='http://127.0.0.1/'>[首頁]</a></b> & nbsp; ")
If (p < Pages) Then
Response.Write("<a href='Advanced_Page_10_mis2000lab_DataReader_Row_Number.aspx?p=" & (p + 1) & "'>[下一頁>>>]</a>")
End If
'========= MIS2000 Lab.自製的「每十頁」一間隔,分頁功能=========start====
Response.Write("<hr width='97%' size=1>")
'== 這裡跟書本一樣,只需修改超連結的「檔案名稱」即可(請配合書本的範例,COPY上來即可)
'========= MIS2000 Lab.自製的「每十頁」一間隔,分頁功能=========end====
End If
End If
cmd1.Cancel()
dr.Close()
Conn.Close()
End Sub
=======================================================================
上面的 DataReader程式,大多來自於這個範本,
請您參考一下:http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3446.aspx
這個程式最大的缺點就是「分頁的頁數」,透過 HTTP Get來傳遞,
必須注意 SQL Injection(資料隱碼)攻擊。
如果您可以改成 Session or ViewState來傳遞頁數,那就安心多了。
這是給 書本(ASP.NET專題實務) "上集" 的讀者,提供的補充習題。
當作 Ch. 12 與 Ch. 14的補充範例。
..................................................................................................................................................................
如果您想把這段程式集結成一個 function,可以參考下面的作法:
..................................................................................................................................................................
如果您「第一次」看這種 ADO.NET程式覺得很困難,那是正常的,請不要灰心。
沒有人能不經學習,就能一次搞定。
只要有人、有書本帶著您走一遍,這都很簡單。
=== 最後要打一下廣告 ==========================
1. 如果您覺得我的描述、寫作方式,符合您的胃口。
2. 如果您看完以後,知道我寫書、介紹一些控制項或是技術........不是「混過去」、「帶過去」而已,而是真真確確地蒐集 "有用的範例",讓您學得更深入!
3. 如果您覺得:我出完書以後,還不定期地提供售後服務,提供補充教材......這樣的互動是 "良性"的,是值得鼓勵的。......已經推出 兩百多篇 補充範例了
4. 如果您(尤其是學生)真的想把基礎學好,而不是 "混"過這一門課就好、而不是寫個(畢業專題的)屍體出來交差(能畢業就好).....那麼.......
請您購買下面的書籍,
東西多到您學不完
上 / 下兩集,兩本書的厚度(我蒐集的各種範例)將近 兩千頁 !!......絕對不會讓您失望
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。