【发布时间】:2015-01-02 09:43:08
【问题描述】:
我有以下中继器:
<asp:Repeater ID="repeater1" runat="server" OnItemDataBound="repeater1_ItemDataBound">
<HeaderTemplate>
...
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server" Text='<%#Eval("id")%>'> </asp:Label></td>
<td>
<asp:Label runat="server" Text='<%#Eval("ssdvalue")%>'></asp:Label>
</td>
<td>
<asp:Repeater runat="server" ID="repeater2">
<ItemTemplate>
<asp:Label Text='<%#Eval("stptime")%>' runat="server"></asp:Label>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
现在在上面的代码中有两个转发器:repeater1和repeater2(在标签内)
对于上面我写了以下代码:
DataSet ds = new DataSet();
ds = cls.ReturnDataSet("sp_data",
new SqlParameter("@From_Time", "2014-11-01 00:00:00.000"),
new SqlParameter("@To_Time", "2014-11-03 00:00:00.000"));
repeater1 .DataSource = ds.Tables[0];
repeater1 .DataBind();
这将绑定repeater1。
对于Repeater2,我编写了以下代码:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataSet ds = new DataSet();
ds = cls.ReturnDataSet("sp_data",
new SqlParameter("@From_Time", "2014-11-01 00:00:00.000"),
new SqlParameter("@To_Time", "2014-11-03 00:00:00.000"));
Repeater rpt = (Repeater)e.Item.FindControl("Repeater2");
rpt.DataSource = ds.Tables[1];
rpt.DataBind();
}
}
现在整个输出如下:
Id Ssdvalue stptime
1 112 3 hours 4hours 5 hours 6 hours 12minutes 20minutes
2 234 3 hours 4hours 5 hours 6 hours 12minutes 20minutes
3 450 3 hours 4hours 5 hours 6 hours 12minutes 20minutes
4 987 3 hours 4hours 5 hours 6 hours 12minutes 20minutes
5 456 3 hours 4hours 5 hours 6 hours 12minutes 20minutes
6 091 3 hours 4hours 5 hours 6 hours 12minutes 20minutes
但是上面的输出是不正确的。
I want output like Below:
Id Ssdvalue stptime
1 112 3 hours
2 234 4hours
3 450 5 hours
4 987 6 hours
5 456 12minutes
6 091 20minutes
那么我怎样才能得到上面的输出呢?
【问题讨论】:
-
您的 HTML 格式错误,因为您在彼此之间重复嵌套。我建议你是否用 gridview 替换子中继器。
-
在Repeater1_ItemDataBound 中,您每次都将每个Repeater2 绑定到同一个DataSet - 您需要根据两者之间的关系对其进行过滤。即你怎么知道 ID 为 1 的中继器行应该显示 3 小时的 stptime?
-
从 ds.table[0] 和 ds.tables[1] 输出的行数相同。
-
@deepak - 但你不能指望它足够聪明并自动映射它们。您需要提供任何正确的链接,以便它将 1 映射到 1?
-
好的,但我该怎么做呢?我如何映射?
标签: c# asp.net asp.net-4.0 asprepeater