我们在做复式投票的时候。会遇到标题和选项嵌套的样子,下面我把我的代码放上来。 1,投票选择前台页面
<table height="286" cellSpacing="0" cellPadding="0" width="1000" align="center" bgColor="#ffffff"
border="0">
<tbody>
<tr>
<td vAlign="top" height="286">
<div align="left">
<table height="32" cellSpacing="0" cellPadding="0" width="968" align="center" border="0">
<tbody>
<tr>
<td>
<div align="center"></div>
<div align="center"><strong><%=Title%></strong><br>
</div>
</td>
</tr>
</tbody>
</table>
<table cellSpacing="0" cellPadding="0" width="915" align="center" border="0">
<tbody>
<tr>
<td background="../../images/house4_07.jpg" height="1"><FONT face="宋体"></FONT></td>
</tr>
<tr>
<td>
<table cellSpacing="0" cellPadding="0" width="915" border="0">
<asp:repeater id="Repeater1" Runat="server">
<ItemTemplate>
<tr>
<td>
<%# DataBinder.Eval(Container, "DataItem.FVoteName") %>
<table width="85%" align="center" border="1" bordercolor="#D6E7FF" cellpadding="0" cellspacing="0">
<tr>
<td>
<asp:CheckBoxList id="cb" Runat="server" Visible="False"></asp:CheckBoxList>
<asp:RadioButtonList ID="rb" Runat="server" Visible="False"></asp:RadioButtonList>
<asp:TextBox ID="tb" TextMode="MultiLine" Columns="40" Rows="4" Runat="server" Visible="False"></asp:TextBox>
<input type="hidden" id="hb" runat="server" />
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
</asp:repeater></table>
</td>
</tr>
<tr>
<td align="center"><asp:button id="btnAdd" runat="server" Text="提交"></asp:button></td>
</tr>
</tbody>
</table>
</div>
<div align="right"></div>
</td>
</tr>
</tbody>
</table>
2,后台代码
protected System.Web.UI.WebControls.Repeater Repeater1;
public Seaskyer.Modules.Utils.DBClass db = new Seaskyer.Modules.Utils.DBClass();
protected System.Web.UI.WebControls.Button btnAdd;
public string Title;
//public string cid;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
string cid = "";
if(db.q("id")!="")
{
cid=db.q("id");
}
Title = db.getSingleValue("cms_VotePro","FProName","FID",cid);
BindRep();
}
}
/// <summary>
/// 绑定Repeater控件,显示调查中的大类
/// </summary>
public void BindRep()
{
string strsql = "select * from cms_vote where FProID='"+db.q("id")+"'";
db.dp.CommandText = strsql;
DataTable dt = db.dp.DataTableSQL();
if(dt.Rows.Count>0)
{
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
CheckBoxList cb = (CheckBoxList)e.Item.FindControl("cb");
RadioButtonList rb = (RadioButtonList)e.Item.FindControl("rb");
TextBox tb = (TextBox)e.Item.FindControl("tb");
System.Web.UI.HtmlControls.HtmlInputHidden hb = (HtmlInputHidden)e.Item.FindControl("hb");
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取分类ID
string Fid = rowv["FVoteId"].ToString();
string type = rowv["FType"].ToString();
string strsql = "select * from cms_VoteItem where FVoteId='"+Fid+"'";
//Response.Write("<script>alert('"+strsql+"');</script>");
db.dp.CommandText = strsql;
DataTable dt = db.dp.DataTableSQL();
switch(Convert.ToInt32(type))
{
case 1:
rb.Visible = true;
cb.Visible = false;
tb.Visible = false;
rb.DataSource = dt;
rb.DataTextField = "FItemName";
rb.DataValueField = "FID";
rb.DataBind();
break;
case 2:
rb.Visible = false;
cb.Visible = true;
tb.Visible = false;
cb.DataSource = dt;
cb.DataTextField = "FItemName";
cb.DataValueField = "FID";
cb.DataBind();
break;
case 3:
tb.Visible = true;
rb.Visible = false;
cb.Visible = false;
break;
}
}
private void btnAdd_Click(object sender, System.EventArgs e)
{
string cb = "";//复选框
string rb = "";//单选框
string tb = "";//如果有文本框
foreach (RepeaterItem item in this.Repeater1.Items)
{
CheckBoxList cb1 = (CheckBoxList)item.FindControl("cb");
RadioButtonList rb1 = (RadioButtonList)item.FindControl("rb");
TextBox tb1 = (TextBox)item.FindControl("tb");
//CheckBox cb = (CheckBox)item.FindControl("CheckBoxRole");
if(cb1.Visible==true)
{
for(int i=0;i<cb1.Items.Count;i++)
{
if(cb1.Items[i].Selected==true)
{
cb += "'"+cb1.Items[i].Value+"'" + ",";
}
}
}
if(rb1.Visible==true)
{
for(int i=0;i<rb1.Items.Count;i++)
{
if(rb1.Items[i].Selected==true)
{
rb = "'"+rb1.Items[i].Value+"'";
}
}
}
if(tb1.Visible==true)
{
tb = tb1.Text + "|";
}
}
string id = "";
if(cb.Trim()!="")
{
cb = cb.Substring(0,cb.Length-1);
id = cb;
}
if(rb.Trim()!="")
{
if(id.Trim()!="")
{
id += "," + rb;
}
else
{
id += rb;
}
}
//id = cb + rb;
if(id.Trim()=="")
{
Response.Write("<script>alert('你没有进行选择!');history.go(-1);</script>");
}
string strsql = "update cms_VoteItem set FItemNum=FItemNum+1 where FID in ("+id+")";
db.dp.CommandText = strsql;
db.dp.ExecuteNonQuery();
Response.Write("<script>alert('投票结束!');location.href='VoteView.aspx?id="+db.q("id")+"';</script>");
// Response.Write(id);
}
3,显示投票结果前台
<table height="286" cellSpacing="0" cellPadding="0" width="1000" align="center" bgColor="#ffffff"
border="0">
<tbody>
<tr>
<td vAlign="top" height="286">
<div align="left">
<table height="32" cellSpacing="0" cellPadding="0" width="968" align="center" border="0">
<tbody>
<tr>
<td>
<div align="center"></div>
<div align="center"><strong><%=Title%></strong><br>
</div>
</td>
</tr>
</tbody>
</table>
<table cellSpacing="0" cellPadding="0" width="915" align="center" border="0">
<tbody>
<tr>
<td background="../../images/house4_07.jpg" height="1"><FONT face="宋体"></FONT></td>
</tr>
<tr>
<td>
<table cellSpacing="0" cellPadding="0" width="915" border="0">
<asp:repeater id="Repeater1" Runat="server">
<ItemTemplate>
<tr>
<td>
<%# DataBinder.Eval(Container, "DataItem.FVoteName") %>
<asp:Repeater ID="rep" Runat="server">
<ItemTemplate>
<table width="85%" align="center" border="1" bordercolor="#D6E7FF" cellpadding="0" cellspacing="0">
<tr>
<td width="10%">
选项:
</td width="20%">
<td><%# DataBinder.Eval(Container, "DataItem.FItemName") %></td>
<td width="10%">票数:</td>
<td width="10%"><%# DataBinder.Eval(Container, "DataItem.FItemNum") %></td>
<td width="10%">百分比:</td>
<td width="40%"><img src="images/654.gif" height="5" width="<%# IsViews(DataBinder.Eval(Container, "DataItem.FVoteId").ToString(),DataBinder.Eval(Container, "DataItem.FItemNum").ToString()) %>"><%# IsView(DataBinder.Eval(Container, "DataItem.FVoteId").ToString(),DataBinder.Eval(Container, "DataItem.FItemNum").ToString()) %></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
</asp:repeater></table>
</td>
</tr>
<tr>
<td align="center"></td>
</tr>
</tbody>
</table>
</div>
<div align="right"><FONT face="宋体"></FONT></div>
</td>
</tr>
</tbody>
</table>
4,后台代码
protected System.Web.UI.WebControls.Repeater Repeater1;
public Seaskyer.Modules.Utils.DBClass db = new Seaskyer.Modules.Utils.DBClass();
public string Title;
//public string cid;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
string cid = "";
if(db.q("id")!="")
{
cid=db.q("id");
}
Title = db.getSingleValue("cms_VotePro","FProName","FID",cid);
BindRep();
}
}
/// <summary>
/// 绑定Repeater控件,显示调查中的大类
/// </summary>
public void BindRep()
{
string strsql = "select * from cms_vote where FProID='"+db.q("id")+"'";
db.dp.CommandText = strsql;
DataTable dt = db.dp.DataTableSQL();
if(dt.Rows.Count>0)
{
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
Repeater rep = (Repeater)e.Item.FindControl("rep");
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取分类ID
string Fid = rowv["FVoteId"].ToString();
string strsql = "select * from cms_VoteItem where FVoteId='"+Fid+"'";
//Response.Write("<script>alert('"+strsql+"');</script>");
db.dp.CommandText = strsql;
DataTable dt = db.dp.DataTableSQL();
rep.DataSource = dt;
rep.DataBind();
}
public string IsView(string cid,string num)
{
string strsql = "select sum(FItemNum) from cms_VoteItem where FVoteId='"+cid+"'";
db.dp.CommandText = strsql;
DataTable dt = db.dp.DataTableSQL();
double Sums = Convert.ToInt32(dt.Rows[0][0].ToString());
if(num=="0")
return "0%";
else
return (Convert.ToDouble(num)/Sums).ToString("P");
}
public string IsViews(string cid,string num)
{
string strsql = "select sum(FItemNum) from cms_VoteItem where FVoteId='"+cid+"'";
db.dp.CommandText = strsql;
DataTable dt = db.dp.DataTableSQL();
double Sums = Convert.ToInt32(dt.Rows[0][0].ToString());
if(num=="0")
return "0%";
else
return (Convert.ToDouble(num)/Sums*300).ToString();
}
其中的表cms_VotePro是记录复式的主标题 cms_vote是记录投票项 cms_VoteItem是最后的小项了