用C#写网站后台时的记录
该功能要实现的内容有,动态的发布投票,可以任意的添加投票项,可以实现单选和多选的功能并提示用户输入。
首先编写发布投票的内容,数据库设计。由于要动态的添加,所以需要两个表,一个VOTE表存储投票的标题,类型,一个VOTEITEM表存储投票的每一个投票项,两者之间用ID连接。
数据库设计如下
T_VOTE(ID(PRIMARY KEY),VOTENAME,VOTEKIND,VOTETIME)
T_VOTEITEM(VOTEID,VOTEITEMCONTEXT,VOTENUM)
动态添加的实现代码:
页面部分
<div>
<h2>创建投票</h2>
<p>标题:<asp:TextBox ID=”voteTitle” runat=”server”></asp:TextBox><span id=”voteTitleRemind” class=”ml5 r3″></span></p>
<p>种类:<asp:RadioButton ID=”voteKindSingle” runat=”server” Text=”单选” GroupName=”voteKind” Checked=”true” />
<asp:RadioButton ID=”voteKindMulti” runat=”server” Text=”多选” GroupName=”voteKind” /></p>
<asp:Panel ID=”votePanel” runat=”server”>
<ol class=”vote_item_list”>
<li>候选项1:<asp:TextBox ID=”voteItem1″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项2:<asp:TextBox ID=”voteItem2″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项3:<asp:TextBox ID=”voteItem3″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项4:<asp:TextBox ID=”voteItem4″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项5:<asp:TextBox ID=”voteItem5″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项6:<asp:TextBox ID=”voteItem6″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项7:<asp:TextBox ID=”voteItem7″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项8:<asp:TextBox ID=”voteItem8″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项9:<asp:TextBox ID=”voteItem9″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项10:<asp:TextBox ID=”voteItem10″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
</ol>
<a id=”voteAddMore” href=”javascript:void(0);”><b>+</b>增加更多选项</a>
<ol id=”voteItemMoreList” class=”vote_item_list hd”>
<li>候选项11:<asp:TextBox ID=”voteItem11″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项12:<asp:TextBox ID=”voteItem12″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项13:<asp:TextBox ID=”voteItem13″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项14:<asp:TextBox ID=”voteItem14″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项15:<asp:TextBox ID=”voteItem15″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项16:<asp:TextBox ID=”voteItem16″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项17:<asp:TextBox ID=”voteItem17″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项18:<asp:TextBox ID=”voteItem18″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项19:<asp:TextBox ID=”voteItem19″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
<li>候选项20:<asp:TextBox ID=”voteItem20″ runat=”server” CssClass=”vote_input”></asp:TextBox></li>
</ol>
</asp:Panel>
<p><asp:Button ID=”voteAddSubmit” runat=”server” Text=”发布投票” οnclick=”voteAddSubmit_Click” /></p>
</div>
通过JAVASCRIPT动态的添加候选项,如果不用添加则不需要填写;
处理页部分
string title = voteTitle.Text;
string kind = “1”;
if (voteKindSingle.Checked == true)
{
kind = “0”;
}
SqlConnection mystr = new SqlConnection();
mystr.ConnectionString = “Data Source=mike;Initial Catalog=jishengWebSite;User ID=sa;Password=123456;Pooling=False”;
mystr.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = mystr;
//先插入标题,获取插入id
string command = @”INSERT INTO T_Vote (VoteName,VoteKind,VoteTime) VALUES (@name,@kind,getdate())”;
cmd.CommandText = command;
cmd.Parameters.AddWithValue(“@name”, title);
cmd.Parameters.AddWithValue(“@kind”, kind);
//执行
int val=cmd.ExecuteNonQuery();
//获取返回id
command = @”execute VoteId ‘”+title+”‘”;
cmd.CommandText = command;
int vote_id = Convert.ToInt32(cmd.ExecuteScalar());
//如果标题插入成功
if (vote_id > 0 && val == 1)
{
//遍历投票项
foreach (Control c in votePanel.Controls)
{
if (c.GetType().ToString() == “System.Web.UI.WebControls.TextBox”)
{
TextBox txtTemp = c as TextBox;
string item = txtTemp.Text;
string itemid = txtTemp.ID;
string id = vote_id.ToString();
if (item != “”)
{
string sql_item = @”INSERT INTO T_VoteItem (VoteId,VoteItemContext,VoteItemNum) VALUES (@” + itemid + “,@” + itemid + “_con,0)”;
cmd.CommandText = sql_item;
cmd.Parameters.AddWithValue(“@” + itemid, id);
cmd.Parameters.AddWithValue(“@” + itemid + “_con”, item);
cmd.ExecuteNonQuery();//执行插入投票选项
}
}
}
}
mystr.Close();
}
原理是先实现将标题插入VOTE表,若成功,遍历PANEL内的空间找到候选的文本框不为空的项,通过字符串拼接将数据循环存入VOTEITEM表中。
第二个设计的是投票列表的显示,这个参考前面的文章列表显示和数据传输就可以解决。
第三个设计的是投票功能和投票结果。
页面代码
<div>
<asp:DataGrid ID=”datagrid1″ runat=”server” AutoGenerateColumns=”False” DataKeyField=”VoteID” >
<Columns>
<asp:TemplateColumn><HeaderTemplate>投票编号</HeaderTemplate><ItemTemplate><%# DataBinder.Eval(Container.DataItem,”voteid”) %></ItemTemplate></asp:TemplateColumn>
<asp:TemplateColumn><HeaderTemplate>票数</HeaderTemplate><ItemTemplate>
<asp:Label runat=”server” ID=”voteitemnum” Text=<%# DataBinder.Eval(Container.DataItem,”voteitemnum”) %>></asp:Label></ItemTemplate></asp:TemplateColumn>
<asp:TemplateColumn><HeaderTemplate>内容</HeaderTemplate><ItemTemplate>
<asp:Label runat=”server” ID=”voteitemcontext” Text=<%# DataBinder.Eval(Container.DataItem,”voteitemcontext”) %>></asp:Label></ItemTemplate></asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox runat=”server” id=”VoteCheck”> </asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button ID=”Button1″ runat=”server” Text=”投票” OnClick=”VoteBtn_Click” />
<asp:Label ID=”VoteMessage” Runat=”server” Visible=”False” ForeColor=”Red” Font-Bold=”True”>投票成功</asp:Label>
<asp:Label ID=”votemassage2″ runat=”server” ForeColor=”Red” Text=”此投票为单项选择,请重新选择” Visible=”False”></asp:Label></div>
通过一个DATAGRID数据网格来查看数据,将自动设置数据字段设置成FLASE,在代码处写模板,将后台绑定的数据显示在页面上,并且加上复选框。
加入提交的按钮,在旁边设置两个LABLE控件,将其设置为不可见,内容分别为投票成功与不成功的提示信息。
处理页代码
protected void VoteBtn_Click(object sender, System.EventArgs e)
{
SqlConnection mystr = new SqlConnection();
mystr.ConnectionString = “Data Source=mike;Initial Catalog=jishengWebSite;User ID=sa;Password=123456;Pooling=False”;
mystr.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = mystr;
string command = “select votekind from T_Vote where id=” + Convert.ToInt32(datagrid1.DataKeys[0].ToString());
cmd.CommandText = command;
bool issingle = Convert.ToBoolean(cmd.ExecuteScalar());
votemassage2.Visible =false;
if (issingle)
{//多选
foreach (DataGridItem item in datagrid1.Items)
{ //查找每个投票项目的选择控件
CheckBox check = (CheckBox)item.FindControl(“VoteCheck”);
Label votecontext = (Label)item.FindControl(“voteitemcontext”);
Label votenum = (Label)item.FindControl(“voteitemnum”);
if (check != null)
{ //说明用户已经投票,则需要添加这一票
if (check.Checked == true)
{
int num = Convert.ToInt32(votenum.Text.ToString());
num = num + 1;
command = “execute P_AddVoteNum ‘” + Convert.ToInt32(datagrid1.DataKeys[item.ItemIndex].ToString()) + “‘,'”
+ votecontext.Text + “‘,'” + num + “‘”;
cmd.CommandText = command;
cmd.ExecuteScalar();
}
}
}
VoteMessage.Visible = true;
}
else
{//单选
int checknum = 0;
foreach (DataGridItem item in datagrid1.Items)
{
CheckBox check = (CheckBox)item.FindControl(“VoteCheck”);
if (check.Checked!=false)
{
checknum++;
}
}
if (checknum == 1)
{
foreach (DataGridItem item in datagrid1.Items)
{ //查找每个投票项目的选择控件
CheckBox check = (CheckBox)item.FindControl(“VoteCheck”);
Label votecontext = (Label)item.FindControl(“voteitemcontext”);
Label votenum = (Label)item.FindControl(“voteitemnum”);
if (check != null)
{ //说明用户已经投票,则需要添加这一票
if (check.Checked == true)
{
int num = Convert.ToInt32(votenum.Text.ToString());
num = num + 1;
command = “execute P_AddVoteNum ‘” + Convert.ToInt32(datagrid1.DataKeys[item.ItemIndex].ToString()) + “‘,'”
+ votecontext.Text + “‘,'” + num + “‘”;
cmd.CommandText = command;
cmd.ExecuteScalar();
}
}
}
VoteMessage.Visible = true;
}
else
{
votemassage2.Visible = true;
}
}
}
这里只提供投票按钮的代码,数据绑定部分参考前面的文档就可以实现。
首先用查询语句将数据库中对应的投票类型取出来,投票编号由投票裂变传送得到。
判断单选,多选,用IF语句分别写出处理代码,多选时遍历所有的复选框,将选中的复选框对应的内容和投票编号取到,在数据库中就可以确定一条数据,将投票数字段取出来加以后再更新即可。单选时先遍历复选框,统计用户选择了多少个复选框,若多与一个则提示用户选择出错,单个就重复多选的插入代码。
要点:1如何取得绑定的投票内容,编号,和投票数。
在页面出数据绑定的时候不要直接将数据放在表格的单元格里,使用自己命名的LABLE控件,这样在处理也遍历控件的时候就可以取到对应的值了
2,要熟记遍历控件和数据库语句执行的代码
今天的文章【C#】投票系统分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/32708.html