0

既存のフィールドを持つリピーター内の年齢を計算したいと思います。

リピーターにデータを入力するためのクエリ:

var qryGetAllBeneficiaries = from p in dbRRSP.Person 
         join rt in dbRRSP.RelationshipType on p.RelationshipTypeId equals rt.RelationshipTypeId
           where p.PlanId == qryPersonDetails.PlanId
           orderby p.LastName
         select new
               {
             BeneficiaryLastName = p.LastName, 
             BeneficiaryFirstName = p.FirstName,
             BeneficiaryMiddleName = p.MiddleName,
             BeneficiaryAka = p.Aka,
             BeneficiaryBirthday = p.Birthdate,
             BeneficiaryRelationshipToClient = rt.RelationshipTypeDescription
                            };

            rptBeneficiary.DataSource = qryGetAllBeneficiaries;
            rptBeneficiary.DataBind();

リピーター自体:

<asp:Repeater ID="rptBeneficiary" runat="server">
    <HeaderTemplate>
    <table>      
    <tr>
    <td class="labels displayInput_noWidth">Last Name</td>
    <td class="labels displayInput_noWidth">First Name</td>
    <td class="labels displayInput_noWidth">Middle Name</td>
    <td class="labels displayInput_noWidth">Aka</td>
    <td class="labels displayInput_75w">Birthday</td>
    <td class="labels displayInput_noWidth">Age</td>
   </tr>                      
   </HeaderTemplate>

   <ItemTemplate>
   <tr>
   <td><%#DataBinder.Eval(Container.DataItem, "BeneficiaryLastName") %></td> 
   <td><%#DataBinder.Eval(Container.DataItem, "BeneficiaryFirstName") %></td>
   <td><%#DataBinder.Eval(Container.DataItem, "BeneficiaryMiddleName") %></td>
   <td><%#DataBinder.Eval(Container.DataItem, "BeneficiaryAka") %></td>
   <td><%#DateTime.Parse(DataBinder.Eval(Container.DataItem, "BeneficiaryBirthday").ToString()).ToString("MM/dd/yyyy")%></td>
   <td> <%(DateTime.Today.Subtract(DateTime.Parse(DataBinder.Eval(Container.DataItem, "BeneficiaryBirthday").ToString())).Days / 365).ToString()%></td> 


   </tr>                            
   </ItemTemplate>
   <FooterTemplate>
   </table>
   </FooterTemplate>
   </asp:Repeater>

好きな日付文字列にフォーマットする方法を見つけましたが、私が探しているのは、誕生日から今日の日付を引いて、リピーターの各受益者の年齢を取得することです。

私は次の計算をしようとしました:

<td> <%(DateTime.Today.Subtract(DateTime.Parse(DataBinder.Eval(Container.DataItem, "BeneficiaryBirthday").ToString())).Days / 365).ToString()%></td> 

しかし、DataBinder.Evalコンテナーを認識せず、別のusingステートメントSystem.ComponentModel.Containerを追加するように求められました。誰かが私が欠けているものを教えてもらえますか?前もって感謝します。

4

2 に答える 2

1

#コードにがありません:

書く

<td> <%#(DateTime.Today.Subtract(...

それ以外の

<td> <%(DateTime.Today.Subtract(...

Container変数は、データバインディングコンテキストでのみ使用できます。これは、データバインディング構文の代わりに通常のナゲット構文を使用する場合には使用できません。

Eval("yxz")また、の代わりに書くだけで、コードを大幅に短縮できますDataBinder.Eval(Container.DataItem,"xyz")。1つ目は、2つ目の省略形で、データ項目が自動的に想定されます。

于 2013-03-08T17:51:46.127 に答える
0

# が抜けているようです

<td> <%#(DateTime.Today.Subtract(DateTime.Parse(DataBinder.Eval(Container.DataItem, "BeneficiaryBirthday").ToString())).Days / 365).ToString()%></td> 

別の方法として、コレクションをラップするメソッドを作成し、foreach を使用することを検討してください。

<table>      
    <tr>
        <td class="labels displayInput_noWidth">Last Name</td>
        <td class="labels displayInput_noWidth">First Name</td>
        <td class="labels displayInput_noWidth">Middle Name</td>
        <td class="labels displayInput_noWidth">Aka</td>
        <td class="labels displayInput_75w">Birthday</td>
        <td class="labels displayInput_noWidth">Age</td>
   </tr>
   <% foreach (var beneficiary in GetBenificiaries())
   {%> 
   <tr>
       <td><%= beneficiary.BeneficiaryLastName %></td> 
       <td><%= beneficiary.BeneficiaryFirstName %></td>
       <td><%= beneficiary.BeneficiaryMiddleName %></td>
       <td><%= beneficiary.BeneficiaryAka %></td>
       <td><%= beneficiary.BeneficiaryBirthday.ToString("MM/dd/yyyy")%></td>
       <td> <% DateTime.Now.Subtract(beneficiary.BeneficiaryBirthday).Days / 365%></td> 
   </tr> 
   <%}%>

このようにして、はるかに読みやすくなり、強力な型付きインテリセンスが得られ、移行した場合に MVC とより密接に一致し、resharper などのツールを使用すると、これらの変更をより適切にリファクタリングできるようになります。

于 2013-03-08T18:06:03.270 に答える