Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定内转发器_C#_Asp.net_Asp.net 4.0_Asprepeater - Fatal编程技术网

C# 绑定内转发器

C# 绑定内转发器,c#,asp.net,asp.net-4.0,asprepeater,C#,Asp.net,Asp.net 4.0,Asprepeater,我有以下中继器: <asp:Repeater ID="repeater1" runat="server" OnItemDataBound="repeater1_ItemDataBound"> <HeaderTemplate> ... </HeaderTemplate> <ItemTemplate> <tr> <

我有以下中继器:

<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>
这将绑定中继器1

对于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();
 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
那么,我如何获得上述输出呢?

这样做:-

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"));         
        Label Label1 = (Label)e.Item.FindControl("Label1");
        Repeater rpt = (Repeater)e.Item.FindControl("Repeater2");
        var source = ds.Tables[1].AsEnumerable()
                .Where(x => x.Field<int>("Id") == Convert.ToInt32(Label1.Text))
                .Select(x => new 
                      { 
                          stptime= x.Field<DateTime>("stptime")
                      });
       rpt.DataSource = source ;
       rpt.DataBind();
      }
}
protectedvoid Repeater1\u ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
如果(e.Item.ItemType==ListItemType.Item ||
e、 Item.ItemType==ListItemType.AlternatingItem)
{
数据集ds=新数据集();
ds=cls.ReturnDataSet(“sp_数据”,
新的SqlParameter(“@From_Time”,“2014-11-01 00:00:00.000”),
新的SqlParameter(“@To_Time”,“2014-11-03 00:00:00.000”);
Label1=(Label)e.Item.FindControl(“Label1”);
中继器rpt=(中继器)e.Item.FindControl(“中继器2”);
var source=ds.Tables[1].AsEnumerable()
其中(x=>x.Field(“Id”)==Convert.ToInt32(Label1.Text))
.选择(x=>new
{ 
stptime=x.字段(“stptime”)
});
rpt.DataSource=来源;
rpt.DataBind();
}
}

由于您需要使用相同的Id进行映射,因此必须根据Id筛选数据,即
Id
1将映射到
stpTime
3小时,依此类推。因此,我们需要使用LINQ
Where
子句过滤主数据源,并从
Label

获取相应的Id。您的HTML格式不正确,因为您在彼此内部重复嵌套。我建议您使用gridview替换子repeater。在Repeater1_ItemDataBound中,每次都将每个Repeater2绑定到同一个数据集-您需要根据2之间的关系对此进行筛选。i、 e您如何知道Id为1的中继器行应显示3小时的stptime?这两个行从ds.table[0]和ds.tables[1]输出的行数相同。@deepak-但您不能期望它足够智能并自动映射它们。你需要提供任何正确的链接,以便它将1映射到1?好的,但我如何才能做到这一点?如何绘制地图?