投票模塊設(shè)計-案例_第1頁
投票模塊設(shè)計-案例_第2頁
投票模塊設(shè)計-案例_第3頁
投票模塊設(shè)計-案例_第4頁
投票模塊設(shè)計-案例_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、投票模塊設(shè)計在一些網(wǎng)站的應(yīng)用中,為了加強用戶和網(wǎng)站之間的交互,常常開發(fā)投票模塊讓用戶能夠參與到網(wǎng)站的活動中,網(wǎng)站還能夠通過投票模塊進行用戶信息的統(tǒng)計和調(diào)查,使用投票模塊能夠更好的讓網(wǎng)站與用戶進行交互。26.1 學(xué)習要點投票模塊需要涉及到一些ASP.NET 3.5的基本知識,如果要仔細學(xué)習投票模塊的開發(fā),需要詳細了解本書的一些章節(jié)知識,這些章節(jié)如下所示:q Web窗體基本控件。q 數(shù)據(jù)庫基礎(chǔ)。q ADO.NET常用對象。q Web窗體數(shù)據(jù)控件。q ASP.NET內(nèi)置對象。q 生成靜態(tài)的概念q 自定義控件和用戶控件?;玖私饬艘陨险鹿?jié)的知識點后,就能夠熟練學(xué)習和開發(fā)此模塊。26.2 系統(tǒng)設(shè)計投票模

2、塊開發(fā)起來對技術(shù)的要求并不是很高,但是投票的表設(shè)計和樣式呈現(xiàn)都是有技巧的。在網(wǎng)站應(yīng)用中,有些應(yīng)用就需要使用投票模塊,例如網(wǎng)站信息統(tǒng)計和網(wǎng)站信息調(diào)查等,投票模塊還能夠進行熱點調(diào)查等。26.2.1 模塊功能描述投票模塊能夠加強用戶與網(wǎng)站之間的交互,投票模塊能夠加強用戶和網(wǎng)站信息之間的互動,網(wǎng)站可以使用投票功能進行網(wǎng)站內(nèi)容的調(diào)查,例如調(diào)查用戶是否滿意網(wǎng)站的設(shè)計或者是否滿意網(wǎng)站改版等等。同時投票模塊還能夠進行熱點事件的調(diào)查,例如“你怎么看待XX事件”等等,都可以使用投票模塊進行統(tǒng)計。投票模塊在設(shè)計上來說比較的簡單,在后臺的投票發(fā)布中,只需要進行相應(yīng)的投票項目的發(fā)布即可,而在呈現(xiàn)時,需要調(diào)用多個表進行投

3、票的呈現(xiàn)。例如在投票表的設(shè)計中,不能夠?qū)⒁粋€投票和選項設(shè)計在一起,那么一個投票有可能有單個選項或多個選項,不同的投票之間可能選項不同,如果將這些字段設(shè)計在一起,那么就會造成很大的數(shù)據(jù)浪費。投票模塊的功能模塊比較容易和簡單,模塊圖如圖26-1所示。圖26-1 投票模塊功能描述正如圖26-1所示,投票模塊的功能大概可以描述為投票管理和投票呈現(xiàn),管理員可以在后臺進行投票管理,包括投票發(fā)布、投票修改和投票刪除。投票發(fā)布或修改完畢后,用戶就能夠在前臺進行相應(yīng)的操作,包括投票和查看結(jié)果等。在前臺的用戶投票頁面中,可以使用ASP.NET 3.5 AJAX進行無刷新操作實現(xiàn)用戶的無刷新進行投票和結(jié)果統(tǒng)計。從上

4、述模塊功能描述中可以規(guī)劃成以下幾個頁面和控件:q 登錄頁面:管理員登錄頁面,為管理員提供身份驗證。q 后臺框架集:用于管理員的管理操作。q 投票發(fā)布頁面:管理員用于投票的發(fā)布。q 投票刪除頁面:管理員用于刪除投票。q 投票修改頁面:管理員用于投票的修改。其中登錄頁面用于制作后臺的登錄窗口,其作用同新聞模塊中的登錄一樣??蚣芗糜谥谱骱笈_管理界面,能夠方便管理員在不同的頁面和功能之間進行切換。管理員首先需要進行身份驗證,當身份驗證通過后管理員就能夠在后臺進行投票的發(fā)布、刪除和修改,管理員在后臺進行投票操作后,用戶能夠在前臺查看相應(yīng)的投票并進行操作,投票控件可以用用戶控件制作,這樣能夠為用戶投票提

5、供操作。而投票的查看可以使用自定義控件制作,使用自定義控件能夠呈現(xiàn)更多的投票效果,這些效果包括統(tǒng)計、百分比等。26.2.2 模塊流程分析雖然投票模塊不是網(wǎng)站開發(fā)過程中最重要的模塊,但是投票模塊在網(wǎng)站開發(fā)過程中也非常的實用?,F(xiàn)在可以看到在各個大型網(wǎng)站中都會有投票模塊的存在,因為投票模塊可以提高用于和網(wǎng)站之間的交互,也能夠提高用戶與用戶之間的交互。當出現(xiàn)了一個熱門話題時,例如“您對番茄花園作者被抓有什么看法”時,使用新聞模塊能夠進行網(wǎng)站和用戶之間的交流,但是卻很難明顯的看出用戶的意愿,也無法統(tǒng)計用戶的觀點的信息。使用投票功能能夠良好的解決這個問題,投票能夠很好的進行統(tǒng)計,非常直觀的呈現(xiàn)百分比,如圖

6、26-2所示。圖26-2 投票模塊從圖26-2中可以看出不同的用戶的不同的觀點,也能夠快速的統(tǒng)計出大流的用戶管理,例如“喜歡讀書還是工作”這個問題上,可以看出很多人選擇了“我現(xiàn)在工作了,我想回到學(xué)校去讀書”這一選項。在新聞模塊中雖然能夠通過評論來進行用戶交互,但是很多時候的效果并沒有投票好。投票可以快速的統(tǒng)計群體對于某觀點的意向,但是在投票模塊中,管理員和用戶進行的操作流程都是不同的,投票模塊相應(yīng)的流程如圖26-3和圖26-4所示所示。 圖26-3 用戶操作流程圖 圖26-4 管理員操作流程圖對于用戶而言,用戶需要訪問投票模塊,在訪問投票模塊時可以查看投票數(shù)據(jù)然后進行投票操作,當用戶進行了投票

7、操作就會更新投票數(shù)據(jù)和相應(yīng)的統(tǒng)計信息,系統(tǒng)在對數(shù)據(jù)進行重更新后再呈現(xiàn)在頁面。而對于管理員而言,需要在后臺進行投票發(fā)布和修改,在發(fā)布和修改后系統(tǒng)根據(jù)投票進行數(shù)據(jù)的初始化或統(tǒng)計并呈現(xiàn)在相應(yīng)的頁面中。26.3 數(shù)據(jù)庫設(shè)計在投票模塊的數(shù)據(jù)庫設(shè)計中,需要多個表進行投票數(shù)據(jù)的描述。同樣為了系統(tǒng)運行的安全,在后臺同樣需要登錄操作,只有管理員進行登錄后才能夠發(fā)布投票。而對于用戶,進行不同的操作時,還需要對數(shù)據(jù)庫中的相應(yīng)字段進行更新。26.3.1 數(shù)據(jù)庫設(shè)計在投票模塊中,需要多個表進行投票模塊的描述,其中最重要的數(shù)據(jù)庫就是投票問題表和投票選項表。投票問題表用于存放和投票相關(guān)的問題的數(shù)據(jù),而投票選項表用于存放和投

8、票選項相關(guān)的數(shù)據(jù),在對投票模塊和流程分析后,可以為幾個表進行字段規(guī)劃,其中投票表字段可以歸納如下。q 投票編號:用于標識投票,為自動增長的主鍵。q 投票標題:用于顯示標題,作為投票模塊的標題。q 投票內(nèi)容:用于解釋投票信息的一些內(nèi)容。投票問題表的字段非常的少,其主要是用于索引,而投票選項表需要同投票問題表一起整合使用,一同描述一個投票模塊。q 投票選項編號:用于標識投票選項,為自動增長的主鍵。q 投票選項統(tǒng)計:用于標識該投票被選擇的次數(shù)。q 投票描述:用于描述投票中的一個選項。q 投票選項ID:用于標識該投票選項是隸屬于哪個投票問題,為投票問題表的外鍵。管理員表用于管理員登錄和驗證操作,其作用

9、同登錄模塊和新聞模塊中的登錄模塊基本相同,其字段如下所示。q 管理員編號:用于標識管理員信息,為自動增長的主鍵。q 管理員用戶名:用于標識管理員用戶名。q 管理員密碼:用于標識管理員的密碼,通常情況下和管理員用戶名一起進行身份驗證。其中投票問題表和投票選項表一同描述投票模塊,如圖26-5所示。圖26-5 投票模塊的形成投票問題表和投票選項表一同描述投票模塊,在呈現(xiàn)一個投票項目時,在投票問題表中只需要顯示投票的問題,而投票的選項則需要通過投票問題的標識(ID)號來進行篩選,在投票選項表中有一個投票選項ID字段,該字段就是用于標識這個選項是屬于哪個投票問題的。只有將這兩個表中的數(shù)據(jù)進行整合才能夠完

10、整的實現(xiàn)一個投票所需要的數(shù)據(jù)表。投票模塊的數(shù)據(jù)設(shè)計并不復(fù)雜,而投票模塊中將不同的表的數(shù)據(jù)進行呈現(xiàn)卻比數(shù)據(jù)設(shè)計更加復(fù)雜的。26.3.2 數(shù)據(jù)表的創(chuàng)建創(chuàng)建表可以通過SQL Server Management Studio視圖進行創(chuàng)建也可以通過SQL Server Management Studio 查詢使用SQL語句進行創(chuàng)建。在創(chuàng)建表之前首先需要創(chuàng)建數(shù)據(jù)庫post,在post數(shù)據(jù)庫中只需要創(chuàng)建3個表就能夠?qū)崿F(xiàn)投票項目的描述,其中投票表(posttitle)的字段如圖26-6所示。圖26-6 投票表結(jié)構(gòu)圖從投票表的結(jié)構(gòu)圖可以看出只需要創(chuàng)建三個字段就能夠表述投票問題,這三個字段的意義如下所示。q id

11、:用于標識投票,為自動增長的主鍵。q title:用于顯示標題,作為投票模塊的標題顯示。q content:用于解釋投票信息的一些內(nèi)容。創(chuàng)建表的SQL語句如下所示。 USE post GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.posttitle( /創(chuàng)建posttitle表 id int IDENTITY(1,1) NOT NULL, title nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, content nvarchar(max) COLLATE Ch

12、inese_PRC_CI_AS NULL, CONSTRAINT PK_posttitle PRIMARY KEY CLUSTERED ( id ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY上述代碼創(chuàng)建了投票表并創(chuàng)建了相應(yīng)的字段,為了配合投票問題表,還需要創(chuàng)建投票選項表,投票選項表的字段如下所示。q id:用于標識投票選項,為自動增長的主鍵。q

13、hits:用于標識該投票被選擇的次數(shù)。q content:用于標識投票項及其描述。q askid:用于標識該投票選項是隸屬于哪個投票問題,為投票問題表的外鍵。這里值得注意的是,選項表中的askid字段同投票表一同描述投票項,投票選項表創(chuàng)建的SQL語句如下所示。 USE post GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.postchoose( /創(chuàng)建postchookse表 id int IDENTITY(1,1) NOT NULL, hits int NULL, content nvarchar(

14、max) COLLATE Chinese_PRC_CI_AS NULL, askid int NULL, CONSTRAINT PK_postchoose PRIMARY KEY CLUSTERED ( id ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY上述代碼創(chuàng)建了postchookse表用于描述投票的選項,其中asdid為投票問題表的id,該

15、鍵為外鍵,用于篩選和整合兩個表中的數(shù)據(jù)。在投票的發(fā)布中,為了系統(tǒng)的安全性,還需要創(chuàng)建系統(tǒng)表用于管理員登錄,admin表只需要保存管理員的用戶名和密碼即可,則其字段可以描述為如下所示。q id:用于標識管理員信息,為自動增長的主鍵。q admin:用于標識管理員用戶名。q password:用于標識管理員的密碼,通常情況下和管理員用戶名一起進行身份驗證。上述字段描述了admin表中需要使用的字段,可以使用SQL語句進行表和字段的創(chuàng)建,創(chuàng)建newsclass表的SQL語句如下所示。 USE post GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON

16、GO CREATE TABLE dbo.admin( /創(chuàng)建admin表 id int IDENTITY(1,1) NOT NULL, admin nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, password nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT PK_admin PRIMARY KEY CLUSTERED ( id ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,

17、ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY上述代碼創(chuàng)建了admin表,用于進行管理員的身份驗證,在后臺的管理員登錄中需要使用到該表,在表創(chuàng)建完成后,需要向數(shù)據(jù)庫中添加管理員,添加管理員代碼如下所示。 INSERT INTO admin (admin,password) VALUES (guojing,0123456)執(zhí)行上述代碼就能夠進行admin表的數(shù)據(jù)插入,插入一個新管理員之后,就能夠在后面的登錄操作中使用該表的管理員信息進行登錄和投票操作。26.4 界面設(shè)計投票模塊包括眾多的頁面,這些頁面包括發(fā)

18、布投票頁面、修改投票頁面和刪除投票頁面,這其中還包括投票管理頁面。在投票模塊中,不適用進行ASP.NET自帶的控件進行操作,在投票模塊的頁面設(shè)計中需要自行開發(fā)自定義頁面。26.4.1 后臺框架集在Microsoft Expression Web 2中,選擇菜單欄中的【文件】選項,在下拉菜單中選擇【新建】選項,單擊【新建】選項中的【網(wǎng)站】選項創(chuàng)建網(wǎng)站,在彈出窗口中選擇框架集,如圖26-7所示。圖26-7 創(chuàng)建框架集框架集可以將多個頁面放置在同一個頁面,在Microsoft Expression Web 2中可以創(chuàng)建框架集并為框架集中的頁面進行指定或新建,這里可以創(chuàng)建一個目錄類型的框架集,創(chuàng)建后框

19、架集代碼見光盤中源代碼第26章26-126-1admindefault.aspx。開發(fā)人員可以在框架集中創(chuàng)建網(wǎng)頁或選擇設(shè)置初始網(wǎng)頁,這里創(chuàng)建兩個網(wǎng)頁,一個用于顯示導(dǎo)航,此頁面為sidebar.aspx,管理員能夠在該頁面進行導(dǎo)航處理。另一個則是主工作區(qū),用于管理員操作,導(dǎo)航欄初始化代碼見光盤中源代碼第26章26-126-1adminsidebar.aspx。投票管理的操作并不多,所以在后臺中管理員導(dǎo)航的節(jié)點也并不多,管理員在后臺主要執(zhí)行投票管理和添加投票兩個操作,投票管理操作包括了投票的修改和刪除。26.4.2 投票管理頁面投票管理頁面的數(shù)據(jù)顯示可以使用ASP.NET 3.5提供的GridVi

20、ew控件,由于投票模塊其功能的復(fù)雜性,這里并不能使用ASP.NET 3.5自帶的控件進行修改,所以在投票管理頁面只能夠使用GridView控件進行數(shù)據(jù)羅列,并添加相應(yīng)的超鏈接,示例代碼見光盤中源代碼第26章26-126-1adminmanage.aspx。在管理頁面中,其代碼使用了GridView控件進行數(shù)據(jù)羅列,但在GridView控件中添加的是兩個數(shù)據(jù)綁定的超鏈接分別用于實現(xiàn)修改和刪除功能,如圖26-8和圖26-9所示。 圖26-8 添加修改超鏈接 圖26-9 添加刪除超鏈接可以看出修改和刪除超鏈接都會通過參數(shù)傳遞跳轉(zhuǎn)到另一個頁面,其中修改超鏈接跳轉(zhuǎn)的是modi.aspx?id=編號,而刪

21、除超鏈接跳轉(zhuǎn)的是delete.aspx?id=編號。通過參數(shù)的傳遞,開發(fā)人員能夠在相應(yīng)的頁面進行業(yè)務(wù)邏輯處理。注意:這種情況很像ASP的開發(fā)過程,為了能夠讓開發(fā)人員更好的理解控件的制作,可以使用類似ASP的開發(fā)流程進行過程開發(fā)。由于頁面只需要進行數(shù)據(jù)的呈現(xiàn),所以數(shù)據(jù)源并不需要支持數(shù)據(jù)操作,數(shù)據(jù)源代碼如下所示。 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:postConnectionStrin

22、g %>" SelectCommand="SELECT * FROM posttitle ORDER BY id DESC"> </asp:SqlDataSource>從上述代碼可以看出,數(shù)據(jù)源中并沒有自動支持插入、更新、刪除等數(shù)據(jù)操作,因為對于投票管理頁面的GridView控件而言,其作用只是用于數(shù)據(jù)的呈現(xiàn),而無需進行數(shù)據(jù)操作。26.4.3 投票發(fā)布頁面投票發(fā)布頁面用于管理員的投票發(fā)布,管理員可以在投票發(fā)布頁面進行投票信息的填寫,在投票發(fā)布頁面,管理員需要填寫投票信息和投票選項信息,這就涉及到多個表的數(shù)據(jù)操作。在管理員填寫投票選項信息時,

23、需要向投票選項表中重復(fù)插入數(shù)據(jù),因為投票選項往往是多項,而投票問題只是一項。投票發(fā)布頁面涉及到兩個表和程序篩選,將在后面的章節(jié)中講到,而投票發(fā)布頁面的設(shè)計只需要進行基礎(chǔ)控件布局即可,示例代碼見光盤中源代碼第26章26-126-1adminpost.aspx。投票代碼使用了TextBox控件用于管理員的信息輸入,管理員能夠在相應(yīng)的控件中填寫投票信息并通過按鈕控件提交數(shù)據(jù)。在投票發(fā)布頁面中,投票選項同樣使用的是TextBox控件。再次回到流程分析中,用戶在前臺進行投票。投票同樣包含多個選項,有的投票包含1個或3個選項,有的投票包含2個或4個選項,那么在投票功能中就不能規(guī)定死投票選項的個數(shù)。在投票發(fā)

24、布時,管理員需要按照投票的選項個數(shù)進行投票發(fā)布,同時在投票中又需要降低數(shù)據(jù)庫的使用率,這里就需要智能篩選數(shù)據(jù)。這里使用的是回車篩選,即一個回車就是一個選項。為投票功能設(shè)計頁面以便管理員添加投票項目,頁面設(shè)計后如圖26-10所示。圖26-10 投票頁面設(shè)計26.4.4 投票修改頁面投票修改頁面同投票發(fā)布頁面相同,在投票頁面被加載時,投票的基本信息需要載入并存儲在投票修改頁面中的控件里,當管理員單擊【修改投票】按鈕時,就能夠進行數(shù)據(jù)篩選和修改,投票修改頁面示例代碼見光盤中源代碼第26章26-126-1adminmodi.aspx。投票修改頁面在加載時接受傳遞過來的參數(shù),使用傳遞的參數(shù)獲取數(shù)據(jù)庫中投

25、票的相應(yīng)信息進行頁面中控件的文本填充。管理員可以通過修改頁面中相應(yīng)的信息進行數(shù)據(jù)更改,當更改完畢后管理員可以進行數(shù)據(jù)操作更新相應(yīng)的數(shù)據(jù)選項。26.4.5 投票刪除頁面投票刪除頁面可以不進行頁面布局的處理,因為投票刪除頁面主要作用為刪除數(shù)據(jù)。當管理員在投票管理頁面進行投票刪除選擇時,會跳轉(zhuǎn)到投票刪除頁面,投票刪除頁面通過獲取傳遞過來的參數(shù)進行投票的刪除,刪除完畢后再次返回投票管理頁面,所以在投票刪除頁面中只需要進行事務(wù)的處理而不需要進行頁面布局和控件處理。26.5 代碼實現(xiàn)投票模塊的頁面整體設(shè)計比較簡單,但是投票功能的實現(xiàn)還需要掌握一些難點。投票模塊的難點就在于一個投票的問題和多個投票選項是如何

26、整合,并且在發(fā)布投票時如何進行多項投票發(fā)布,在修改投票時同樣修改選項和篩選選項都是一個難題。26.5.1 添加投票代碼實現(xiàn)添加投票時,管理員在投票選項中可以用回車進行分割,系統(tǒng)能夠使用回車進行多個選項篩選和數(shù)據(jù)插入。在代碼實現(xiàn)中,首先要將投票選項控件中的文本進行分割,這里使用回車進行分割,每個回車就會創(chuàng)建一個新的投票項。添加投票的具體實現(xiàn)思路為:q 管理員在投票控件中按回車進行多個選項添加。q 管理員單擊按鈕控件進行數(shù)據(jù)添加。q 數(shù)據(jù)添加時按照回車進行選項分割,當有多個回車時說明有多個選項。q 添加投票問題表,添加完成后獲取剛剛添加的投票的編號。q 循環(huán)添加投票選項,并為選項添加相應(yīng)的ID。從

27、上述實現(xiàn)思路可以編寫相應(yīng)的代碼,示例代碼如下所示。 protected void Button1_Click(object sender, EventArgs e) SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=post;Integrated Security=True"); /創(chuàng)建連接 con.Open(); /打開連接 string trim = TextBox3.Text.Replace("n", "|"); /回車替換成字

28、符 string count = trim.Split('|'); /替換后分拆 string strsql = "insert into posttitle (title,content) values ('"+TextBox1.Text+"','"+TextBox2.Text+"') SELECT IDENTITY as 'bh' " /編寫SQL語句 SqlCommand cmd = new SqlCommand(strsql, con); /創(chuàng)建執(zhí)行對象 int

29、id=Convert.ToInt32(cmd.ExecuteScalar(); /執(zhí)行數(shù)據(jù)插入 for (int i = 0; i < count.Length; i+) /循環(huán)添加 string contentinsert = "insert into postchoose (hits,content,askid) values ('0','" + counti.ToString() + "','" + id + "')" /遍歷插入項目 SqlCommand command =

30、 new SqlCommand(contentinsert, con); /創(chuàng)建執(zhí)行對象 command.ExecuteNonQuery(); /執(zhí)行遍歷 con.Close(); /關(guān)閉連接 上述代碼中將管理員輸入的投票選項通過回車分割,添加選項方法如圖26-11所示。圖26-11 輸入投票選項管理員輸入投票選項時,可以以回車的形式進行投票選項的分割,如圖26-11所示,其中管理員添加了6個選項,在數(shù)據(jù)插入前,首先需要將不同的投票選項之間分割,示例代碼如下所示。 string trim = TextBox3.Text.Replace("n", "|")

31、; /替換字符 string count = trim.Split('|'); /分割字符串上述代碼將回車字符串替換成為“|”符號,然后通過Split將字符串進行分割,在圖26-11中輸入的字符串會被分割為“投票選項1|投票選項2|投票選項3.”,Split函數(shù)能夠?qū)⑦@個字符串進行分割并放置在數(shù)組中,如“count0=投票選項1,count1=投票選項2”,這樣就能夠通過數(shù)組循環(huán)進行數(shù)據(jù)插入,示例代碼如下所示。 for (int i = 0; i < count.Length; i+) /遍歷執(zhí)行 string contentinsert = "insert i

32、nto postchoose (hits,content,askid) values ('0','" + counti.ToString() + "','" + id + "')" SqlCommand command = new SqlCommand(contentinsert, con); /SQL語句 command.ExecuteNonQuery(); /執(zhí)行SQL 使用ADO.NET中數(shù)據(jù)操作的ExecuteScalar方法和SQL語句的“SELECT IDENTITY as”語法能夠返

33、回剛才數(shù)據(jù)插入的值,在進行選項遍歷插入之前,首先需要得到剛才插入的投票問題的編號。使用ExecuteScalar方法能夠獲取剛剛插入的數(shù)據(jù)的編號,獲取后就需要在遍歷操作中為相應(yīng)的選項指定其問題的ID號。執(zhí)行一次操作后其表之間的關(guān)系如圖26-12和圖26-13所示。 圖26-12 投票問題表 圖26-13 投票選項表從圖26-12,26-13可以看出投票問題表和投票選項表之間一起描述了一個投票項目,通過回車的方式能夠使不同的投票項目中的投票問題和投票選項之間分離開,這樣投票項目與投票項目之間就沒有選項等約束,一個投票可以有多個選項,不同的投票之間投票選項個數(shù)可以不同,其統(tǒng)計和描述也可以不同。但是

34、這樣進行數(shù)據(jù)庫設(shè)計同樣也會有一些缺點,其缺點就是在投票選項表中可能會占用過多的數(shù)據(jù)。26.5.2 修改投票代碼實現(xiàn)在修改投票代碼頁面載入時,首先同樣需要和投票插入一樣進行數(shù)據(jù)篩選。一個投票項目需要兩個數(shù)據(jù)表進行描述,在頁面加載時需要加載多個表中的數(shù)據(jù),示例代碼如下所示。 protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) /判斷是否第一次加載 TextBox3.Text = "" /清空控件值 Label1.Text = "" /清空控件值 SqlConnection

35、 con = new SqlConnection("Data Source=(local); Initial Catalog=post;Integrated Security=True"); /創(chuàng)建連接 con.Open(); /打開連接 string strsql = "select * from posttitle where id='" + Request.QueryString"id" + "'" SqlDataAdapter da = new SqlDataAdapter(strsql,

36、con); DataSet ds = new DataSet(); /創(chuàng)建數(shù)據(jù)集 da.Fill(ds, "table"); /填充投票數(shù)據(jù) string strchoose = "select * from postchoose where askid='" + Request.QueryString"id" + "'" SqlDataAdapter ch = new SqlDataAdapter(strchoose, con); int count = ch.Fill(ds, "cho

37、osetable"); /填充投票選項 TextBox1.Text = ds.Tables"table".Rows0"title".ToString(); /填充控件 TextBox2.Text = ds.Tables"table".Rows0"content".ToString(); /填充控件 for (int i = 0; i < count; i+) /循環(huán)獲取數(shù)據(jù) if (i = count - 1) /判斷是否循環(huán)完 TextBox3.Text += ds.Tables"cho

38、osetable".Rowsi"content".ToString().Replace("r", ""); Label1.Text += ds.Tables"choosetable".Rowsi"id".ToString(); /填充數(shù)據(jù) else TextBox3.Text += ds.Tables"choosetable".Rowsi"content".ToString() + "n" Label1.Text += ds.

39、Tables"choosetable".Rowsi"id".ToString() + "|" /填充數(shù)據(jù) con.Close(); /關(guān)閉連接 上述代碼實現(xiàn)了當頁面加載時其相應(yīng)的數(shù)據(jù)被加載的相應(yīng)的控件的功能,其中比較復(fù)雜的就在于兩個數(shù)據(jù)表中的數(shù)據(jù)如何整合在一起。在投票選項中,其選項需要整合在一起放置在控件中,同時還需要像添加投票一樣一行一個投票項目。不僅如此,還需要將這些投票項目的編號進行統(tǒng)計,如果不進行統(tǒng)計則不能夠使用編號進行相應(yīng)的數(shù)據(jù)字段的更新,只有保存相應(yīng)的選項的數(shù)據(jù)的編號才能夠循環(huán)更新。在添加投票時,將選項與選項之間進行回車分

40、割,在載入頁面時,同樣要需要將數(shù)據(jù)呈現(xiàn)為選項與選項之間的回車形式,示例代碼如下所示。 for (int i = 0; i < count; i+) /循環(huán)獲取數(shù)據(jù) if (i = count - 1) /判斷是否循環(huán)完 TextBox3.Text += ds.Tables"choosetable".Rowsi"content".ToString().Replace("r", ""); Label1.Text += ds.Tables"choosetable".Rowsi"id&q

41、uot;.ToString(); /填充數(shù)據(jù) else TextBox3.Text += ds.Tables"choosetable".Rowsi"content".ToString() + "n" Label1.Text += ds.Tables"choosetable".Rowsi"id".ToString() + "|" /填充數(shù)據(jù) 上述代碼將投票選項的數(shù)據(jù)和相應(yīng)的編號進行填充,在進行更新時同樣可以使用控件中的數(shù)據(jù)進行數(shù)據(jù)分割操作然后進行數(shù)據(jù)更新,更新代碼如下所示。 p

42、rotected void Button1_Click(object sender, EventArgs e) SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=post;Integrated Security=True"); /創(chuàng)建連接 con.Open(); /打開連接 string trim = TextBox3.Text.Replace("n", "|"); /替換字符 string count = trim.Split(&#

43、39;|'); /分割字符 string count2 = Label1.Text.Split('|'); /計算分割 if (count != count2) /判斷項數(shù) Label2.Text = "修改不能修改投票項數(shù)" else string strsql = "update posttitle set title='" + TextBox1.Text + "',content='" + TextBox2.Text + "' where bh='&quo

44、t; + Request.QueryString"id" + "'" /編寫更新語句 SqlCommand cmd = new SqlCommand(strsql, con); /創(chuàng)建執(zhí)行對象 cmd.ExecuteNonQuery(); /執(zhí)行對象 for (int i = 0; i < count.Length; i+) /遍歷更新 strsql = "update postchoose set content='" + counti.ToString() + "' where id=

45、9;" + count2i.ToString() + "'" /生成SQL語句 SqlCommand cmd1 = new SqlCommand(strsql, con); /更新數(shù)據(jù) cmd1.ExecuteNonQuery(); /執(zhí)行更新 con.Close(); /關(guān)閉連接 在Page_Load代碼中,將選項的編號都存放到Label控件中,在執(zhí)行更新時,需要分別循環(huán)遍歷選項控件和Label控件進行數(shù)據(jù)更新。在數(shù)據(jù)更新中,并不能修改投票的項數(shù),這也就是說在發(fā)布投票時有多少選項則在修改時只能夠修改相應(yīng)的選項而不能增加選項或刪除選項26.5.3 刪除投票

46、代碼實現(xiàn)在投票項目刪除時,并不能像前面的模塊一樣只對模塊問題項目進行刪除。在刪除模塊問題表時,同樣需要刪除投票的選項,這樣就能夠保證數(shù)據(jù)庫的完整性。因為如果對投票的問題進行刪除而不對投票的選項進行刪除的話,會造成大部分的垃圾數(shù)據(jù),同樣也會影響到程序的性能。刪除投票通過傳遞的參數(shù)進行兩個表中相應(yīng)的數(shù)據(jù)的刪除,示例代碼如下所示。 protected void Page_Load(object sender, EventArgs e) SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=po

47、st;Integrated Security=True"); /創(chuàng)建連接 con.Open(); /打開連接 string deletetitle = "delete posttitle where id='"+Request.QueryString"id"+"'" /刪除 string deletechoose = "delete postchoose where askid='"+Request.QueryString"id"+"'&quo

48、t; /刪除 SqlCommand cmd = new SqlCommand(deletetitle, con); cmd.ExecuteNonQuery(); /執(zhí)行刪除 SqlCommand cmd1 = new SqlCommand(deletechoose, con); cmd1.ExecuteNonQuery(); /執(zhí)行刪除 Response.Redirect("manage.aspx"); /頁面跳轉(zhuǎn) 上述代碼分別刪除了兩個表中的數(shù)據(jù),在進行刪除操作時首先需要對數(shù)據(jù)庫中的投票問題表中的數(shù)據(jù)進行刪除,刪除后還需要刪除與投票問題表相關(guān)的投票選項,其中投票選項中的a

49、skid字段用于標識選項所對應(yīng)的問題,只有執(zhí)行了兩個表中相應(yīng)的數(shù)據(jù)的刪除才能夠真正刪除一個投票項目。26.5.4 顯示投票代碼實現(xiàn)當管理員發(fā)布代碼后,就需要進行代碼的顯示,代碼顯示同樣需要獲取兩個表中相應(yīng)的投票項的信息,在顯示過程,還需要對投票中的數(shù)據(jù)進行顯示和圖表設(shè)計。在投票顯示之前,首先需要遍歷投票的選項并且計算投票選項的總和,計算完成投票的總和后,再分別計算每個選項被用戶選擇的次數(shù)。例如有一個投票項目名為“你怎么看待上大學(xué)”,其中選項有“上學(xué)好,比工作輕松”和“上學(xué)沒自由”等等選項,首先就需要統(tǒng)計所有的選數(shù)的總和,假設(shè)是100票,然后再統(tǒng)計選擇“上學(xué)好,比工作輕松”的票數(shù),進行相應(yīng)的統(tǒng)計

50、。在統(tǒng)計時,需要遍歷數(shù)據(jù)庫中的數(shù)據(jù)進行計算,計算完成后可以通過HTML呈現(xiàn)給用戶,示例代碼如下所示。 protected void Page_Load(object sender, EventArgs e) SqlConnection con = new SqlConnection("Data Source=(local); Initial Catalog=post;Integrated Security=True"); /創(chuàng)建連接 con.Open(); /打開連接 string title; /配置字段 string id = Request.QueryString&q

51、uot;id" /獲取參數(shù) string width = "500px" /設(shè)置寬度 string str = "select * from posttitle where id='" + id + "'" /執(zhí)行查詢 SqlDataAdapter da = new SqlDataAdapter(str, con); /創(chuàng)建適配器 DataSet ds = new DataSet(); /創(chuàng)建數(shù)據(jù)集 da.Fill(ds, "table"); /填充數(shù)據(jù)集 string str2 = "select * from postchoose where askid='" + id + "'" /

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論