2017-05-30 4 views
0

J'essaye de créer un employé Shift Scheduler. En ce moment, j'essaie d'afficher les changements de vitesse actuels.Comment afficher des données dans des répéteurs imbriqués avec plusieurs tables?

ci-dessous est ma sortie de courant: snip1

Comme vous pouvez le voir, il y a 2 quarts de travail le samedi. Je souhaite afficher ces deux équipes sous l'en-tête "Samedi 3 juin 2017", plutôt que d'avoir des doublons. Est-ce que quelqu'un peut me dire quels changements je dois apporter à mon code pour y parvenir?

J'ai posté mon code actuel ci-dessous:

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

Vous devez définir "ne fonctionne pas". Recevez-vous un message d'erreur? Ne renvoie-t-il pas les bonnes données? En outre, vous avez vraiment besoin de regarder dans les requêtes paramétrées avant que les tables de bobby viennent visiter. http://bobby-tables.com/ –

+0

@SeanLange Je paramétrerai quand je l'aurai fonctionné, je le promets, je vais vous montrer! :) Lorsque j'essaie d'exécuter ce code, j'obtiens cette erreur: _Informations supplémentaires: La conversion d'un type de données varchar en un type de données datetime aboutit à une valeur hors plage._ – user2911539

+1

Alors, où cela se produit-il? L'autre chose que vous devez vraiment faire est d'enrouler votre connexion et votre adaptateur dans une instruction USING ou votre pool de connexions va manquer de connexions car vous n'en disposez pas. Quant au paramétrage ... pourquoi ne pas le faire maintenant? Ce n'est guère un effort supplémentaire. J'ai vu tant de projets où "je vais paramétrer" se transforme en .... "Oh j'ai oublié parce que ça fonctionnait". Faites-le dès le début. –

Répondre

0

Commençons par cette erreur. Avez-vous la même erreur de date lors de la modification ci-dessous? Si non, que se passe-t-il?

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

Salut, j'ai apporté quelques modifications à le code depuis l'affichage de ceci. – user2911539