2017-05-30 71 views
0

我正在尝试创建一个Employee Shift Scheduler。目前,我正试图显示当前的转变。如何在多表中嵌套中继器显示数据?

下面是我的电流输出: snip1

正如你所看到的,有上周六2班。我想在一个标题下显示这两个变化 - “2017年6月3日星期六”,而不是重复。

有人可以告诉我为了实现这个目的我需要对代码做些什么改变?

我已张贴下面我当前的代码:

HTML:

<asp:Repeater ID="repSubscription" runat="server" OnItemDataBound="repSubscription_ItemDataBound"> 
        <ItemTemplate> 
         <div class="col-lg-2"> 
          <div class="panel panel-default"> 
           <div class="panel-heading" style="background-color: #3A6EA5; color: white"> 
            <h4 class="panel-title"> 
             <%# Eval("Start_Time", "{0:dddd, dd MMMM yyyy}") %> 
            </h4> 
           </div> 
           <!--panel-heading--> 
           <div class="panel-body"> 
            <asp:Repeater ID="repShift" runat="server"> 
             <ItemTemplate> 
              <b><%# Eval("Job_Title") %></b> 
             </ItemTemplate> 
            </asp:Repeater> 
            </br> 
            <asp:Repeater ID="repEmp" runat="server"> 
             <ItemTemplate> 
              <%# Eval("Employee_Name") %> 
             </ItemTemplate> 
            </asp:Repeater> 
            <br /> 
            <asp:Repeater ID="repTimes" runat="server"> 
             <ItemTemplate> 
              <%# Eval("Start_Time", "{00:HH:MM}") %> - <%# Eval("End_Time" , "{00:HH:MM}") %> 
             </ItemTemplate> 
            </asp:Repeater> 
           </div> 
          </div> 
         </div> 
        </ItemTemplate> 
       </asp:Repeater> 

C#:

 `private void bindRepeater() 
{ 
    conn = new SqlConnection(connectionString); 
    conn.Open(); 
     comm = new SqlCommand("SELECT DISTINCT Start_Date, End_Date FROM My_Subscription WHERE Subscription_Id = 1", conn); 
     SqlDataReader reader1 = comm.ExecuteReader(); 
     while (reader1.Read()) 
     { 
       startDate = Convert.ToDateTime(reader1["Start_Date"]); 
       endDate = Convert.ToDateTime(reader1["End_Date"]);' 

       //lblError.Text += startDate.ToString() + "<br/>" + 
    endDate.ToString(); 

     } 
    conn.Close(); 
    using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT DISTINCT Start_Time, Emp_ID, Job_ID, Emp_Sch_Id FROM My_Employee_Schedule WHERE Start_Time BETWEEN @startReportDate AND @endReportDate", con)) 
      { 
       cmd.Parameters.AddWithValue("@startReportDate", startDate); 
       cmd.Parameters.AddWithValue("@endReportDate", endDate); 
       using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
       { 
        DataTable dt = new DataTable(); 
        sda.Fill(dt); 
        repSubscription.DataSource = dt; 
        repSubscription.DataBind(); 
       } 
      } 
    } 
} 

protected void repSubscription_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    conn = new SqlConnection(connectionString); 
    conn.Open(); 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater repBusiness = (Repeater)(e.Item.FindControl("repShift")); 


     string Group_Id = DataBinder.Eval(e.Item.DataItem, "Job_ID").ToString(); 
     //Need to assign the Data in datatable 
     SqlDataAdapter sda = new SqlDataAdapter("Select Job_Title FROM My_Job_Type WHERE Job_Type_Id= '" + Group_Id + "';", conn); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     repBusiness.DataSource = dt; 
     repBusiness.DataBind(); 
    } 
    conn.Close(); 


    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater repTimes = (Repeater)(e.Item.FindControl("repTimes")); 


     string Group_Id = DataBinder.Eval(e.Item.DataItem, "Emp_Sch_Id").ToString(); 
     //Need to assign the Data in datatable 
     SqlDataAdapter sda = new SqlDataAdapter("Select Start_Time, End_Time FROM My_Employee_Schedule WHERE Emp_Sch_Id= '" + Group_Id + "';", conn); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     repTimes.DataSource = dt; 
     repTimes.DataBind(); 
    } 


    conn.Open(); 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater repEmp = (Repeater)(e.Item.FindControl("repEmp")); 


     string Group_Id = DataBinder.Eval(e.Item.DataItem, "Emp_ID").ToString(); 
     //Need to assign the Data in datatable 
     SqlDataAdapter sda = new SqlDataAdapter("Select Employee_Name FROM My_Employee WHERE Employee_Id= '" + Group_Id + "';", conn); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     repEmp.DataSource = dt; 
     repEmp.DataBind(); 
    } 
    conn.Close(); 
}` 
+1

您需要定义“不工作”。你是否收到错误信息?它没有返回正确的数据吗?此外,在bobby表访问之前,您确实需要查看参数化查询。 http://bobby-tables.com/ –

+0

@SeanLange当我得到它的工作,我会参数化,我保证,我会告诉你! :)当我尝试运行此代码时,出现此错误:_附加信息:将varchar数据类型转换为日期时间数据类型导致超出范围值._ – user2911539

+1

那么这发生在哪里?你真正需要做的另一件事是将你的连接和适配器包装在一个USING语句中,否则你的连接池将会因连接不足而无法处理。至于参数化....为什么不现在就做呢?这几乎没有任何额外的努力。我看过很多这样的项目,其中“我会参数化”变成....“哦,我忘了,因为它工作。”从一开始就做正确的事。 –

回答

0

让我们先从这个错误。更改下面的内容时是否会得到相同的日期错误?如果不是,发生了什么?

protected void repFullSchedule_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      Repeater repCurrentShift = (Repeater)(e.Item.FindControl("repCurrentShifts")); 


      string Start_time = DataBinder.Eval(e.Item.DataItem, "Start_Time").ToString(); 
      //DateTime my_Time = DateTime.ParseExact(Start_time, "dd/MM/yyyy HH:mm", System.Globalization.CultureInfo.InvariantCulture); 
      SqlCommand cmd = new SqlCommand("Select Job_Type FROM Shift WHERE [email protected]_Time", con); 
      cmd.Parameters.AddWithValue("@my_Time", Start_time); 
      SqlDataAdapter sda = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      repCurrentShift.DataSource = dt; 
      repCurrentShift.DataBind(); 
     } 
    } 
} 
+0

嗨,我做了一些更改自发布此代码以来的代码。 – user2911539