嵌套的repeater,怎么每行求和,放在每行最后一个单元格

liaorifang 2012-07-31 05:04:11
 <table  border="1" align="left" cellspacing="0" bordercolor="#196ce3" 
rules="all"
style="border: 1px solid #196ce3; border-collapse: collapse; height:237px; width: 1001px;">
<tr>
<td colspan="5" align="center" height="60"><strong>成绩表</strong></td>
</tr>
<tr>
<td rowspan="2" align="center" width="150"> <strong> 得分情况 </strong> </td>

<td colspan="4" align="center"><strong> c程序设计 </strong></td>

</tr>

<tr >
<td align="center" style="cursor:hand;">
<strong>简单题</strong></td>
<td align="center" style="cursor:hand;">
<strong>中等题</strong></td>
<td align="center" style="cursor:hand;">
<strong>难题</strong></td>
<td align="center" style="cursor:hand;">
<strong>总分</strong></td>
</tr>


<asp:Repeater ID="Repeater4" runat="server"
onitemdatabound="Repeater4_ItemDataBound" >
<ItemTemplate>
<tr>
<td width="150" align="center" height="30"><%# Eval("chapter").ToString() %></td>
<asp:Repeater ID="Repeater3" runat="server" >
<ItemTemplate>

<td width="50" align="center"><strong> <%# Eval("e_score").ToString() %></strong></td>
<td width="50" align="center"><strong> <%# Eval("m_score").ToString()%></strong></td>
<td width="50" align="center"><strong> <%# Eval("d_score").ToString()%></strong></td>
<td width="50" align="center"><strong> <% # 这里是要绑定的总分 %></strong></td>

</ItemTemplate>
</asp:Repeater>
</tr>
</ItemTemplate>
</asp:Repeater>

</table>

这是前台代码。 红色字体就是要绑定的,就是e_score + m_score + d_score 放在那里

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Repeater4Bind();
}
}

protected void Repeater4Bind()
{
string sql = "select distinct chapter from student_score where sid='" + Session["uid"].ToString() + "' order by chapter";
Common comm = new Common();
DataSet ds = comm.GetDataSet(sql);
Repeater4.DataSource = ds.Tables[0].DefaultView;
Repeater4.DataBind();
}

protected void Repeater4_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("Repeater3") as Repeater; // 找到里层的repeater对象
string sql = "select * from student_score where chapter = '" + DataBinder.Eval(e.Item.DataItem, "chapter") + "' and sid='" + Session["uid"].ToString() + "' ";
Common comm = new Common();
DataSet ds = comm.GetDataSet(sql);
rep.DataSource = ds.Tables[0].DefaultView;
rep.DataBind();

}

}

这是后台代码、、求高手指点迷津 希望步骤详细点 本人刚学.NET不久 有点小白 谢谢!
...全文
215 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
x895238 2012-08-01
  • 打赏
  • 举报
回复
public string setTotal(decimal e_score, decimal m_score, decimal d_score)
{
return (e_score + m_score + d_score).ToString();
}
后台方法

<%# setTotal(decimal.Parse(Eval("d_score").ToString()),decimal.Parse(Eval("m_score").ToString(),decimal.Parse(Eval("e_score").ToString())%>
liaorifang 2012-08-01
  • 打赏
  • 举报
回复
后台

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Repeater4Bind();
}
}

protected void Repeater4Bind()
{
string sql = "select distinct chapter from student_score where sid='" + Session["uid"].ToString() + "' order by chapter";
Common comm = new Common();
DataSet ds = comm.GetDataSet(sql);
Repeater4.DataSource = ds.Tables[0].DefaultView;
Repeater4.DataBind();
}
public int sumE_score = 0;
public int sumM_score = 0;
public int sumD_score = 0;
public int sumT_score = 0;
public int i = 0;



protected void Repeater4_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("Repeater3") as Repeater; // 找到里层的repeater对象
string sql = "select * from student_score where chapter = '" + DataBinder.Eval(e.Item.DataItem, "chapter") + "' and sid='" + Session["uid"].ToString() + "' ";

Common comm = new Common();
DataSet ds = comm.GetDataSet(sql);

rep.DataSource = ds.Tables[0].DefaultView;
rep.DataBind();

foreach (RepeaterItem item in rep.Items)
{
string sqlSum = "select d_score+e_score+m_score as sum_score from student_score where chapter ='" + DataBinder.Eval(e.Item.DataItem, "chapter") + "' and sid='" + Session["uid"].ToString() + "' ";
comm.ExecuteNonQuery(sqlSum);

if (e.Item.ItemType == ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
DataRow dr = ds.Tables[0].Rows[0];
if (dr["e_score"].ToString() != null)
{
sumE_score += Convert.ToInt32(dr["e_score"].ToString());
sumM_score += Convert.ToInt32(dr["m_score"].ToString());
sumD_score += Convert.ToInt32(dr["d_score"].ToString());
sumT_score += Convert.ToInt32(dr["total_score"].ToString());
i++;
}
}
else if (e.Item.ItemType == ListItemType.Footer)
{

}

}
}

}
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
DataBinding:“System.Data.DataRowView”不包含名为“sum_score”的属性。 第2条出现了问题,第一条可以,

C# code
string sqlSum = "select d_score+e_score+m_score as sum_score from student_score where chapter……


……
[/Quote]
hanqing_liu 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
DataBinding:“System.Data.DataRowView”不包含名为“sum_score”的属性。 第2条出现了问题,第一条可以,

C# code
string sqlSum = "select d_score+e_score+m_score as sum_score from student_score where chapter……
[/Quote]

你确定你没绑定错,把后台代码再次发出来瞅瞅!
liaorifang 2012-08-01
  • 打赏
  • 举报
回复
DataBinding:“System.Data.DataRowView”不包含名为“sum_score”的属性。 第2条出现了问题,第一条可以,
                    string sqlSum = "select d_score+e_score+m_score as sum_score from student_score where chapter ='" + DataBinder.Eval(e.Item.DataItem, "chapter") + "' and sid='" + Session["uid"].ToString() + "' ";
comm.ExecuteNonQuery(sqlSum);
[Quote=引用 2 楼 的回复:]
1<%# (int.Parse(Eval("d_score").ToString()) +int.Parse( Eval("d_score").ToString()) + int.Parse(Eval("d_score").ToString()).ToString())%>

2
sql ='select d_score+e_score+m_score as sum_score from s……
[/Quote]
hanqing_liu 2012-08-01
  • 打赏
  • 举报
回复

string sql = "select [color=#FF9900]d_score+e_score+m_score as sum_score,* from student_score where chapter = '" + DataBinder.Eval(e.Item.DataItem, "chapter") + "' and sid='" + Session["uid"].ToString() + "' ";[/color]

这sql 不是已经算了吗

[Quote=引用 9 楼 的回复:]
foreach (RepeaterItem item in rep.Items)

这个不是找到里层的repeater,然后再一行一行的算吗?

引用 8 楼 的回复:
哥,你怎么会加foreach 呢? protected void Repeater4_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

if (e.I……
[/Quote]
liaorifang 2012-08-01
  • 打赏
  • 举报
回复
foreach (RepeaterItem item in rep.Items)

这个不是找到里层的repeater,然后再一行一行的算吗?[Quote=引用 8 楼 的回复:]
哥,你怎么会加foreach 呢? protected void Repeater4_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)……
[/Quote]
hanqing_liu 2012-08-01
  • 打赏
  • 举报
回复
哥,你怎么会加foreach 呢? protected void Repeater4_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("Repeater3") as Repeater; // 找到里层的repeater对象
string sql = "select d_score+e_score+m_score as sum_score,* from student_score where chapter = '" + DataBinder.Eval(e.Item.DataItem, "chapter") + "' and sid='" + Session["uid"].ToString() + "' ";

Common comm = new Common();
DataSet ds = comm.GetDataSet(sql);

rep.DataSource = ds.Tables[0].DefaultView;
rep.DataBind();

}
}





[Quote=引用 6 楼 的回复:]
后台

C# code

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Repeater4Bind();
}
}

pr……
[/Quote]
liuhzdingxm 2012-07-31
  • 打赏
  • 举报
回复
ItemDataBound这个事件也可以进行计算啊
hanqing_liu 2012-07-31
  • 打赏
  • 举报
回复
1<%# (int.Parse(Eval("d_score").ToString()) +int.Parse( Eval("d_score").ToString()) + int.Parse(Eval("d_score").ToString()).ToString())%>

2
sql ='select d_score+e_score+m_score as sum_score from student_score where chapter ='
<%# Eval("sum_score").ToString()%>
天下在我心 2012-07-31
  • 打赏
  • 举报
回复
<td width="50" align="center"><strong> <%# Eval("e_score").ToString() %></strong></td>
<td width="50" align="center"><strong> <%# Eval("m_score").ToString()%></strong></td>
<td width="50" align="center"><strong> <%# Eval("d_score").ToString()%></strong></td>
<td width="50" align="center"><strong> <% # 这里是要绑定的总分 %></strong></td>
你绑定的这里,一种方法是用label控件来显示。比如<%# Eval("e_score").ToString() %>
改成<asp:Label ID="Label1" runat="server"
Text='<%# Eval("e_score").ToString() %>'></asp:Label>
这样,在前体显示的效果没有区别,后台可以在ItemDataBind()事件中,用findControl方法找到控件,然后取值,计算,给最后个总分显示的赋值。
还有就是可以在sql查询的视乎就计算,根据查询的结果直接绑定也可以。
前台绑定查询的Id值,后台方法计算返回等等都是可以的.

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧