0

たとえば、オイル交換など、さまざまなイベントの日付を入力する基本的な asp.net C# Web アプリがあるとします。そして、これをさまざまな車両で追跡したいと思います。そして、オイル交換の日数差を計算したいと思います。

したがって、最新のオイル交換の場合、datediff/timespan は今日から計算されます。しかし、以前のオイル交換については、レコードセット内の以前の各レコード間で datediff/timespan を計算する必要があります。そこに日数を入れるフィールドを作成できると思いますが、プログラムで簡単にできるはずですよね?

さて、従来の 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") %>&nbsp;<i>(<%=datediff("d",rs("changedate"),date()) %> days)</i></td>
</tr>

<%else%>

<tr><td valign="top" width="15%"><%=rs("changedate") %>&nbsp;<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>
4

1 に答える 1

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;



                }

            }
于 2013-01-11T16:30:58.903 に答える