字 段 名 |
数 据 类 型 |
字 段 说 明 |
键 引 用 |
备 注 |
TreeID | int | 投票项目ID | PK | 主键(自动增一) |
Item | varchar(200) | 投票项目的名称 |
||
VoteCount |
int |
票数 |
/* 存储过程Pr_GetVotes */ CREATE PROCEDURE Pr_GetVotes AS SELECT * FROM Votes ORDER BY VoteID /* 存储过程Pr_GetSingleVote */ CREATE PROCEDURE Pr_GetSingleVote (@VoteID int) AS SELECT Votes.* FROM Votes WHERE VoteID = @VoteID /* 存储过程Pr_AddVote */ CREATE PROCEDURE Pr_AddVote(@Item varchar(100)) AS INSERT INTO Votes(Item,ItemCount) VALUES(@Item,0) RETURN @@Identity /* 存储过程Pr_UpdateVote */ CREATE PROCEDURE Pr_UpdateVote (@VoteID int) AS UPDATE Votes SET VoteCount = VoteCount + 1 WHERE VoteID = @VoteID /* 存储过程Pr_DeleteVote */ CREATE PROCEDURE Pr_DeleteVote (@VoteID int) AS DELETE Votes WHERE VoteID = @VoteID |
public class Vote { public SqlDataReader GetVotes() { //定义类SQLHelper SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper(); //定义保存从数据库获取的结果的DataReader SqlDataReader dr = null; try { //执行存储过程 sqlHelper.RunProc("Pr_GetVotes", out dr); } catch (Exception ex) { //抛出执行数据库异常 SystemError.CreateErrorLog(ex.Message); throw new Exception(ex.Message, ex); } //返回从数据库获取的结果 return (dr); } public int AddVote(String sItem) { //定义类SQLHelper SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper(); //创建访问数据库的参数 SqlParameter[] paramList = { sqlHelper.CreateInParam("@Item", SqlDbType.VarChar,100,sItem) }; try { //执行存储过程 return (sqlHelper.RunProc("Pr_AddVote", paramList)); } catch (Exception ex) { //抛出执行数据库异常 SystemError.CreateErrorLog(ex.Message); throw new Exception(ex.Message, ex); } } public void UpdateVote(int nVoteID) { //定义类SQLHelper SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper(); //创建访问数据库的参数 SqlParameter[] paramList = {sqlHelper.CreateInParam("@VoteID", SqlDbType.Int, 4,nVoteID)}; try { //执行存储过程 sqlHelper.RunProc("Pr_UpdateVote", paramList); } catch (Exception ex) { //抛出执行数据库异常 SystemError.CreateErrorLog(ex.Message); throw new Exception(ex.Message, ex); } } public void DeleteVote(int nVoteID) { //定义类SQLHelper SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper(); //创建访问数据库的参数 SqlParameter[] paramList = { sqlHelper.CreateInParam("@VoteID", SqlDbType.Int, 4,nVoteID) }; try { //执行存储过程 sqlHelper.RunProc("Pr_DeleteVote", paramList); } catch (Exception ex) { //抛出执行数据库异常 SystemError.CreateErrorLog(ex.Message); throw new Exception(ex.Message, ex); } } } |
<asp:HyperLink ID="ItemManageLink" NavigateUrl="~/VoteItemManage.aspx" runat="server" Font-Bold="True">投票项目管理</asp:HyperLink> <asp:HyperLink ID="OnlineVoteLink" NavigateUrl="~/WebOnlinVote.aspx" runat="server" Font-Bold="True">网站在线投票</asp:HyperLink> <asp:HyperLink ID="ViewVoteLink" NavigateUrl="~/ShowVoteInfo.aspx" runat="server" Font-Bold="True">查看投票结果</asp:HyperLink> |
在线投票系统运行之后,系统默认页面Default.aspx的初始化界面如图3所示,此时显示3个链接按钮。
图3 投票页面Default.aspx的初始化界面
投票项目管理页面设计
在应用程序WebVote中添加一个新的Web页面,并命名为VoteItemManage.aspx,它的代码隐藏文件为VoteItemManage.aspx.cs文件。
1.页面设计
在页面VoteItemManage.aspx上添加一个列表控件、一个Button控件、一个TextBox控件和一个ImageButton控件,它们的名称分别为ItemList、AddBtn、Item和deleteBtn。控件ItemList显示投票项目表中的所有数据;控件AddBtn实现添加一个新的投票项目;控件Item用来输入新的投票项目名称;控件deleteBtn删除一个投票项目。页面ItemManage.aspx的设计界面如图4所示。
图4 页面VoteItemManage.aspx的设计界面
页面VoteItemManage.aspx的HTML设计代码如下:
<title>网络在线投票系统</title> <link href="CSS/ASPNET2BaseCss.css" type="text/css" rel="stylesheet"> <asp:ListBox id="ItemList" width="150" rows="10" runat="server" CssClass="SelectSta" /> <asp:ImageButton id="deleteBtn" ImageUrl="~/images/delete.gif" AlternateText="删除此项" runat="server" CommandName="delete" OnClick="deleteBtn_Click" /> <asp:TextBox ID="Item" Runat="server" Width="252" CssClass="InputCss"></asp:TextBox> <asp:Button ID="AddBtn" Runat="server" Text="增加新的投票项目" CssClass="ButtonCss" OnClick="AddBtn_Click"></asp:Button> |
private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { //绑定投票项目列表的数据 BindVoteListData(); } } private void BindVoteListData() { //获取投票项目的所有数据 WebVote.Vote vote = new Vote(); SqlDataReader recv = vote.GetVotes(); //设置列表控件的Text属性和Value属性 ItemList.DataTextField = "Item"; ItemList.DataValueField = "VoteID"; //设置控件的数据源,并绑定控件的数据 ItemList.DataSource = recv; ItemList.DataBind(); recv.Close(); //关闭数据读取器 } |
private void AddBtn_Click(object sender, System.EventArgs e) { if (Item.Text.Length > 0) { //定义类 WebVote.Vote vote = new Vote(); try { //添加新数据项 vote.AddVote(Item.Text.Trim()); BindVoteListData(); //显示操作结果信息 Response.Write("<script>window.alert('" + ASPNET2System.OPERATIONADDSUCCESSMESSAGE + "')</script>"); } catch (Exception ex) { //显示添加操作中的失败、错误信息 Response.Redirect("~/DesktopModules/ErrorPage.aspx?ErrorUrl=" + ASPNET2System.RedirectErrorUrl(Request.RawUrl) + "&ErrorMessage=" + ex.Message.Replace("\n", " ")); } } } |
protected void deleteBtn_Click(object sender, ImageClickEventArgs e) { if (ItemList.SelectedIndex <= -1) { //显示操作结果信息 Response.Write("<script>window.alert('" + ASPNET2System.OPERATIONNOSELECTMESSAGE + "')</script>"); return; } //定义类 WebVote.Vote vote = new Vote(); try { //删除数据 vote.DeleteVote(Int32.Parse(ItemList.SelectedValue)); //重新绑定数据 BindVoteListData(); } catch (Exception ex) { //显示删除操作中的失败、错误信息 Response.Redirect("~/DesktopModules/ErrorPage.aspx?ErrorUrl=" + ASPNET2System.RedirectErrorUrl(Request.RawUrl) + "&ErrorMessage=" + ex.Message.Replace("\n", " ")); } } |
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebOnlinVote.aspx.cs" Inherits="WebOnlinVote" %> <HTML><HEAD><title>网络在线投票系统</title></HEAD> <asp:datagrid id="VoteList" CssClass="GbText" Runat="server" AutoGenerateColumns="False" DataKeyField="VoteID"> <Columns> <asp:TemplateColumn ItemStyle-Width="200"> <ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Item")%> </ItemTemplate></asp:TemplateColumn> <asp:TemplateColumn ItemStyle-Width="100"> <ItemTemplate> <asp:CheckBox ID="VoteCheck" Runat="server"></asp:CheckBox> </ItemTemplate></asp:TemplateColumn> </Columns> <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" /> <SelectedItemStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" /> <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" /> <ItemStyle BackColor="White" ForeColor="#330099" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" /> </asp:datagrid> <asp:button id="VoteBtn" Runat="server" Width="100" Text="我要投票"></asp:button> <asp:button id="ShowVote" Runat="server" Width="100" Text="查看投票"></asp:button> <asp:Label ID="VoteMessage" Runat="server" Visible="False" ForeColor="red" Font-Bold="True">投票成功!!!</asp:Label></td> </HTML> |
private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { //绑定投票的项目 BindVoteListData(); VoteMessage.Visible = false; } } private void BindVoteListData() { //获取所有数据 WebVote.Vote vote = new Vote(); SqlDataReader recv = vote.GetVotes(); //设置控件的数据源,并绑定数据 VoteList.DataSource = recv; VoteList.DataBind(); recv.Close(); //关闭数据读取器 } |
private void VoteBtn_Click(object sender, System.EventArgs e) { //定义类 WebVote.Vote vote = new Vote(); try { //添加用户的投票的项目 foreach(DataGridItem item in VoteList.Items) { //查找每个投票项目的选择控件 CheckBox check = (CheckBox)item.FindControl("VoteCheck"); if(check != null) { //说明用户已经投票,则需要添加这一票 if(check.Checked == true) { //修改数据库中的票数 vote.UpdateVote(Int32.Parse( VoteList.DataKeys[item.ItemIndex].ToString())); VoteMessage.Visible = true; //显示用户投票操作的结果 } } } //显示操作结果信息 Response.Write("<script>window.alert(' 投票成功,感谢您的参与!!!')</script>"); } catch (Exception ex) { //显示修改操作中的失败、错误信息 Response.Redirect("~/DesktopModules/ErrorPage.aspx?ErrorUrl=" + ASPNET2System.RedirectErrorUrl(Request.RawUrl) + "&ErrorMessage=" + ex.Message.Replace("\n", " ")); } } private void ShowVote_Click(object sender, System.EventArgs e) { //导向查看投票结果页面 Response.Redirect("~/ShowVoteInfo.aspx"); } |
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowVoteInfo.aspx.cs" Inherits="ShowVoteInfo" %> <HTML><HEAD><title>网络在线投票系统</title></HEAD> <asp:DataGrid ID="VoteList" Runat="server" CssClass="Normal" AutoGenerateColumns="False" DataKeyField="VoteID"> <HeaderStyle BackColor="Orange"></HeaderStyle> <Columns> <asp:TemplateColumn HeaderText="投票项目"> <ItemStyle Width="200px"></ItemStyle> <ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Item")%> </ItemTemplate></asp:TemplateColumn> <asp:TemplateColumn HeaderText="所占总票的百分比"> <ItemStyle Width="300px"></ItemStyle> <ItemTemplate> <asp:Image ID="voteImage" Runat="server" Height="20" Width='<%# FormatVoteImage(FormatVoteCount(DataBinder.Eval( Container.DataItem,"VoteCount").ToString()))%>' mageUrl="Images/vote.gif"> </asp:Image> <%# FormatVoteCount(DataBinder.Eval(Container.DataItem, "VoteCount").ToString())%>% </ItemTemplate></asp:TemplateColumn> <asp:TemplateColumn HeaderText="票数"> <ItemStyle Width="100px"></ItemStyle> <ItemTemplate> <asp:Label ID="VoteCount" Runat="server"> <%# DataBinder.Eval(Container.DataItem,"VoteCount")%> </asp:Label> </ItemTemplate></asp:TemplateColumn> </Columns> </asp:DataGrid> <asp:Label ID="VoteMessage" Runat="server" ForeColor="Red" Width="100%"></asp:Label> <asp:button id="WebOnlineVoteBtn" Runat="server" Width="100" Text="返回投票页面" CssClass="ButtonCss" OnClick="WebOnlineVoteBtn_Click"></asp:button> </HTML> |
int voteTotal = 0; private void Page_Load(object sender, System.EventArgs e) { //设置总票数voteTotal SetVoteTotal(); if(!Page.IsPostBack) { //显示用户投票的具体情况 BindVoteListData(); VoteMessage.Text = "总票数为:" + voteTotal.ToString(); } } private void SetVoteTotal() { //获取所有数据 WebVote.Vote vote = new Vote(); SqlDataReader recv = vote.GetVotes(); voteTotal = 0; //读取每一个参与投票的项目,并计算票数总和 while(recv.Read()) { //计算它们的总和 voteTotal += Int32.Parse(recv["VoteCount"].ToString()); } recv.Close(); } private void BindVoteListData() { //获取数据 WebVote.Vote vote = new Vote(); SqlDataReader recv = vote.GetVotes(); //设置控件的数据源,并绑定控件的数据 VoteList.DataSource = recv; VoteList.DataBind(); recv.Close(); } |
public int FormatVoteCount(String voteCount) { //如果投票没有被投票 if(voteCount.Length <= 0) { //返回0个百分比 return(0); } if(voteTotal > 0) { //返回实际的百分比 return((Int32.Parse(voteCount)* 100/voteTotal)); } return(0); } public int FormatVoteImage(int voteCount) { //返回百分比的图像的长度 return(voteCount * 3); } |
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交