假设我有一个基本的asp.net C#网络应用程序,我输入不同事件的日期,例如换油。我想跟踪不同的车辆。然后我想计算换油之间的天数差异。
因此,对于最近的石油变化,日期/时间跨度将从今天开始计算。但是对于之前的换油,我希望在记录集中的每个先前记录之间计算日期值/时间跨度。我想,我可以创建一个字段来确定那里的天数,但我认为编程应该很容易,不是吗?
现在,在经典的ASP中,我会做这样的事情(事实上,这就是我在这个小应用程序的早期版本中所做的):
<%set rs=conn.Execute("select vehiclename,changedate from oilchange order by changedate desc")
do until rs.EOF
dim recordchk,record
recordchk = record
date2=date1
date1=rs("changedate")
if record <> rs("vehcilename") then
record = rs("vehiclename")
end if%>
<%
if record <> recordchk then
%>
<tr><td colspan="9"><hr color="black"/></td></tr>
<tr><td colspan="9"><b><%=rs("vehiclename") %></b></td></tr>
<tr><td valign="top" width="15%"><%=rs("changedate") %> <i>(<%=datediff("d",rs("changedate"),date()) %> days)</i></td>
</tr>
<%else%>
<tr><td valign="top" width="15%"><%=rs("changedate") %> <i>(<%=datediff("d",rs("changedate"),date2) %> days)</i></td>
</tr>
<%end if%>
<%rs.MoveNext
loop
rs.Close
%>
但是我很难在ASP.NET中怎么做
对于不同的车辆,我有一个中继器,然后我在里面嵌入一个中继器来浏览该车辆的换油记录。在石油变化清单上运行就好了,但我无法弄清楚如何进行计算以获得换油之间的日子。
所以,这是我的代码隐藏......(你可以看到它不是换油,而是改变吉他弦。)
protected void guitarrepeateritemdatabound(object sender, RepeaterItemEventArgs e)
{
stringsEntities db = new stringsEntities();
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
Repeater StringChangeRepeater = (Repeater)e.Item.FindControl("StringChangeRepeater");
HiddenField guitarIDfield = (HiddenField)e.Item.FindControl("guitarIDint");
int guitarIDint = Convert.ToInt32(guitarIDfield.Value);
Label changedate = (Label)e.Item.FindControl("changedate");
TimeSpan timeBetweenChanges = (DateTime.Now - Convert.ToDateTime(changedate));
var qrystringchangesview = (from s in db.stringchange_view
where s.guitarid == guitarIDint
orderby s.changedate descending
select new
{
guitarID2 = s.guitarid,
s.guitarname,
s.stringname,
s.changedate,
s.gauge
});
StringChangeRepeater.DataSource = qrystringchangesview;
StringChangeRepeater.DataBind();
然后是我的aspx页面:
<asp:Repeater ID="GuitarRepeater" runat="server" OnItemDataBound="guitarrepeateritemdatabound">
<ItemTemplate>
<tr>
<td valign="top">
<asp:HiddenField ID="guitarIDint" runat="server" Value='<%# Eval("guitarID") %>' />
<asp:LinkButton OnClick="clicktheinstrument" ID="guitarname" runat="server" Font-Bold="true" CommandArgument='<%#Eval ("guitarID") %>' Text='<%# Eval("guitarname") %>' />
<asp:Repeater runat="server" ID="StringChangeRepeater">
<ItemTemplate>
<table><tr><td style="width:100px">
<asp:Label ID="changedate" runat="server" Text='<%# Eval("changedate","{0:MM/dd/yyyy}") %>'></asp:Label>
(<asp:Label ID="timeBetweenChangesLabel" runat="server"></asp:Label>)
</td><td style="width:200px">
<asp:Label ID="stringname" runat="server" Text='<%# Eval("stringname") %>'></asp:Label>
</td><td style="width:100px">
<asp:Label ID="gauge" runat="server" Text='<%# Eval("gauge") %>'></asp:Label>
</td></tr></table>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color: #F7F7F7">
<td valign="top">
<asp:HiddenField ID="guitarIDint" runat="server" Value='<%# Eval("guitarID") %>' />
<asp:LinkButton OnClick="clicktheinstrument" ID="guitarname" runat="server" Font-Bold="true" CommandArgument='<%#Eval ("guitarID") %>' Text='<%# Eval("guitarname") %>' />
<asp:Repeater runat="server" ID="StringChangeRepeater">
<ItemTemplate>
<table><tr><td style="width:100px">
<asp:Label ID="changedate" runat="server" Text='<%# Eval("changedate","{0:MM/dd/yyyy}") %>'></asp:Label>
(<asp:Label ID="timeBetweenChangesLabel" runat="server"></asp:Label>)
</td><td style="width:200px">
<asp:Label ID="stringname" runat="server" Text='<%# Eval("stringname") %>'></asp:Label>
</td><td style="width:100px">
<asp:Label ID="gauge" runat="server" Text='<%# Eval("gauge") %>'></asp:Label>
</td></tr></table>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</AlternatingItemTemplate>
</asp:Repeater>
答案 0 :(得分:0)
好吧,我在asp.net论坛上得到了一个答案......我以为我会把它发布在这里,以帮助其他人做类似的事情。
foreach (RepeaterItem item in StringChangeRepeater.Items)
{
if (item.ItemType == ListItemType.Item || (item.ItemType == ListItemType.AlternatingItem))
{
HiddenField stringchangeIDHidden = item.FindControl("stringchangeID") as HiddenField;
int stringchangeID = Convert.ToInt32(stringchangeIDHidden.Value);
var getcurrentrecord = (from s in db.stringchange_view
where s.ID == stringchangeID
select new
{
s.changedate
}).First();
Label timeBetweenChangesLabel = item.FindControl("timeBetweenChangesLabel") as Label;
DateTime changedate1 = Convert.ToDateTime(getcurrentrecord.changedate);
TimeSpan changedateSpan = changedateX - changedate1;
TimeSpan changedateSpan2 = changedate1 - Convert.ToDateTime(getcurrentrecord.changedate);
timeBetweenChangesLabel.Text = changedateSpan.Days.ToString();
changedateX = changedate1;
}
}