如何在多表中嵌套中继器显示数据?
问题描述:
我正在尝试创建一个Employee Shift Scheduler。目前,我正试图显示当前的转变。如何在多表中嵌套中继器显示数据?
正如你所看到的,有上周六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();
}`
答
让我们先从这个错误。更改下面的内容时是否会得到相同的日期错误?如果不是,发生了什么?
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
您需要定义“不工作”。你是否收到错误信息?它没有返回正确的数据吗?此外,在bobby表访问之前,您确实需要查看参数化查询。 http://bobby-tables.com/ –
@SeanLange当我得到它的工作,我会参数化,我保证,我会告诉你! :)当我尝试运行此代码时,出现此错误:_附加信息:将varchar数据类型转换为日期时间数据类型导致超出范围值._ – user2911539
那么这发生在哪里?你真正需要做的另一件事是将你的连接和适配器包装在一个USING语句中,否则你的连接池将会因连接不足而无法处理。至于参数化....为什么不现在就做呢?这几乎没有任何额外的努力。我看过很多这样的项目,其中“我会参数化”变成....“哦,我忘了,因为它工作。”从一开始就做正确的事。 –