关于repeater嵌套中的itemdatabound事件的触发问题

peace12211214 2012-08-18 11:30:39
我需要显示一套试卷,试卷的每一道题有四个选项,所以我考虑嵌套repeater控件来实现。但是运行后页面为空。
调试的过程中发现后台中itemdatabound事件的代码根本没有执行。说明itemdatabound事件没有被触发。
我有两个问题:
1.我的page_load中的代码可以执行,但是为什么连第一个repeater控件的内容都不能显示呢?
2.为什么itemdatabound事件没有触发?


我的前台aspx中的代码如下:
<asp:Repeater  ID = "item_list_view_exam" runat ="server"  OnItemDataBound = "item_list_view_exam_ItemDataBound">
<ItemTemplate >
<table width="100%" border="0" cellpadding="0" cellspacing="1" class="mt10" bgcolor="#88c6f0">

<tr class="mlist_f">
<td width="9%" align="center">第<%#Eval("order_id")%>题</td>
<td align="left"><%#Eval("item_title") %></td>
<td><%#Eval("item_state")%></td>
<td align="center"><a href="#../ModifyItem.aspx?id=<%#Eval("id")%>">[修改]</a>
<a href="../Del.aspx?id=<%#Eval("id")%>&tables=item" >[删除]</a></td>
</tr>
<asp:Repeater ID = "result_list_view_exam" runat ="server">
<ItemTemplate >
<tr class="mlist_b">
<td height="24"><%#Eval("options") %></td>
<td width="70%" height="24" align="left"><%#Eval("result_content") %></td>
<td width="10%"><%#Eval("result_score") %></td>
<td width="11%"><a href="#../ModifyResult.aspx?id=<%#Eval("id")%>&item_id=<%#Eval("item_id")%>">[修改]</a>
<a href="../Del.aspx?id=<%#Eval("id")%>&tables=result">[删除]</a></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</ItemTemplate>
</asp:Repeater>
...全文
240 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-08-18
  • 打赏
  • 举报
回复
另外,页面中要加
<%@ Page Language="C#" AutoEventWireup="true" %>
孟子E章 2012-08-18
  • 打赏
  • 举报
回复
首先检查数据源是否有数据
peace12211214 2012-08-18
  • 打赏
  • 举报
回复
后台.cs的代码:
protected void Page_Load(object sender, EventArgs e)
{
string exam_id = Request.QueryString ["id"];
SqlConnection conn = ConnectAccess.OC();
conn.Open();
//找到试卷中的题目在item表中的id。
string str = "select item_id from exam_item where exam_id = " + exam_id + "";
SqlCommand cmd = new SqlCommand(str, conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds, "item_list");
conn.Close();

int item_count = ds.Tables["item_list"].Rows.Count;
conn = ConnectAccess.OC();
conn.Open();
DataColumn dc = new DataColumn ();
dc = ds.Tables["item_list"].Columns.Add("item_title", typeof(string));
dc = ds.Tables["item_list"].Columns.Add("order_id", typeof(int));
for (int i = 0; i < item_count; i++)
{
str = "select * from item where id = " + ds.Tables["item_list"].Rows[i]["item_id"] + "";
cmd = new SqlCommand(str, conn);
sda = new SqlDataAdapter(cmd);
sda.Fill(ds, "item_info");
ds.Tables["item_list"].Rows[i]["item_title"] = ds.Tables["item_info"].Rows[0]["item_title"];
ds.Tables["item_list"].Rows[i]["order_id"] = i + 1;
}
item_list_view_exam.DataSource = ds.Tables["item_list"];
item_list_view_exam.DataBind();
conn.Close();

}

//绑定题目信息时,绑定题目的选项
protected void item_list_view_exam_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
SqlConnection conn = ConnectAccess.OC();
conn.Open();
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("result_list_view_exam") as Repeater;
DataRowView rowv = (DataRowView)e.Item.DataItem;
//以下是读取Repeater1中绑定数据的字段,用于Repeater2的查询条件
string strDecide_No =rowv["item_id"].ToString();
//以下是Repeater2的数据读取和绑定 ,调用数据操作类执行SQL语句
string str = " select * from result where item_id = "+Convert.ToInt32(strDecide_No)+"";

SqlCommand cmd = new SqlCommand(str, conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet ();
sda.Fill(ds, "result_list");

rep.DataSource = ds.Tables["result_list"];
rep.DataBind();
}
}
饕餮123 2012-08-18
  • 打赏
  • 举报
回复
数据为空。。。。。
我以前经常犯得错误

呵呵
孟子E章 2012-08-18
  • 打赏
  • 举报
回复
是的,没有数据,itemdatabound是不执行的。数据源为空你要是实现什么?
peace12211214 2012-08-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

首先检查数据源是否有数据
[/Quote]
的确是因为我的数据源为空导致的。原来如果repeater控件的数据源为空,其itemdatabound是无法触发的。不知道repeater控件的其他事件是否也是如此,还是说只影响与数据源有关的事件。

62,046

社区成员

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

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

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

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