2012-02-04 18 views
0

私は.NETを初めて使用しているので、私はこれに苦労しています。私は、リピータコントロール付きのコンテンツページを持っています。私はDictionary<string, Dictionary<int,[object]>>の辞書を持っています。私は、オブジェクト属性からそれを得るためにRepeaterコントロール内のコントロールの値が欲しい - object.CandNameとなり、候補者名を、候補電話は以下のようになりobject.Phoneなど辞書付きバインディングリピータ<string、Dictionary <int、[object]>

私は辞書のこのタイプのEvalを使用する方法がわかりません。ほとんどの例ではEval("Value")が指摘されていますが、正しい値を示しているわけではありません。親切に助けてください!

<asp:Content ID="Content2" ContentPlaceHolderID="content" Runat="Server"> 
    <div id="rcontent"> 
    <table> 
     <tr> 
     <td> 
      <asp:Label ID="lblerror" runat="server" Text="" Visible="true" CssClass="alert"></asp:Label> 
     </td> 
     </tr> 
    </table> 
    <div id ="rptdiv"> 
     <asp:Repeater ID="Repeater1" runat="server" EnableViewState="false"> 
     <ItemTemplate> 
      <div id="Div3"> 
      <table class="GridViewStyleNoBorder" width=750px cellspacing="0" border="0" > 
       <tr> 
       <td class="PagerStyle" colspan="4"> 
        <asp:Label ID="lblName" Runat="server" 
Text='<%= Need the value of the [object].objectproperty from dictionary here %>' /> 
       </td> 
       </tr> 
      </table> 
      </div> 

これは私のPage_Loadコードが背後にある - BLDecision辞書と辞書の値が正しいかを返す私のビジネス層のコード、です。デバッグモードでチェックしました。背後に

コード:

Dictionary(int, Dictionary(int, InterviewFeedback)) ; 

CandIntDetails = new Dictionary(int, Dictionary(int, InterviewFeedback))(); 

BLDecision objBLDecision = new BLDecision(); 
int ReqCategoryID = 0; 
if (Request.QueryString["ReqCategoryID"] != null) 
    ReqCategoryID = int.Parse(Request.QueryString["ReqCategoryID"].ToString()); 
CandIntDetails = objBLDecision.GetCandidatesforReqCategory(ReqCategoryID); 

Repeater1.DataSource = CandIntDetails; 
Repeater1.DataBind(); 

私は分離コードから使うべき、私はaspxページでEval('<% ....%>')を行うことはできませんか?

ご協力いただきありがとうございます。

+0

データの形式をより正確に記述する必要があります。ある時点で、それは 'Dictionary >'であり、別の場合は 'Dictionary >'を使っていることを意味します。辞書には正確に何が含まれていますか、出力はどのように見えますか?物事を辞書キーでグループ化したいのですか、特定のキーのすべての値にアクセスしたいですか? – Jacob

+0

これは次のとおりです:Dictionary(int、Dictionary(int、InterviewFeedback)); 特定のキーのすべての値にアクセスして表示する必要があります。各行はすべての値にアクセスして表示する必要があります。 –

答えて

0

リピータは1つしか使用できません。あなたは、コンテナ内のコンテナを持っているので、あなたはリピーター内部のリピータが必要になります。

<asp:Repeater ID="Repeater1" runat="server" EnableViewState="false"> 
<ItemTemplate> 
<div id="Div3"> 
    <table class="GridViewStyleNoBorder" width=750px cellspacing="0" border="0" > 
    <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Eval("Value")' > 
     <ItemTemplate> 
    <tr> 
    <td class="PagerStyle" colspan="4"> 
     <asp:Label ID="lblName" Runat="server" 
     Text='<%# Eval("Name") %>' /> 
    </td> 
    </tr> 

     </ItemTemplate> 
    </asp:Repeater> 


    </table> 
    </div> 
</ItemTemplate> 
</asp:Repeater> 
+0

この提案をありがとう。別のRepeaterを追加しましたが、ディクショナリのValueがビジネスオブジェクトであるため、値に直接アクセスできませんでした。だから、私はこれをコードの背後に置いた。私はレコードの価値を表示することができます。ただし、1つのレコードしか表示されません。それは完全に3つのレコードを持っていますが、最初の行を表示しますが、残りは表示しません。私はどこかにそれをループする必要があります、私は何かが不足しています。 –

0

CandIntDetailsDictionary<int, Dictionary<int, InterviewFeedback>>ある場合、あなたはあなたのリピーターのデータソースとして使用する特定のコレクションそれから抽出する必要があります。その理由は、InterviewFeedbackオブジェクトのコレクションをレンダリングするためです。CandIntDetailsではなく、です。

{ 
    46: { 
     0: [InterviewFeedback], 
     1: [InterviewFeedback], 
     2: [InterviewFeedback] 
    } 
} 

それは鍵が内部または外部の辞書のためにあるものをあなたのポストから明らかではないので、これは投機的である:CandIntDetailsは、おそらく次のようになります。外側のキーがある場合は、カテゴリID、およびあなたは内側の辞書キーを気にしないならば、あなたはこのようなあなたのデータソースを抽出することができます(GetCandidatesforReqCategoryはそのような何かを返すなぜわからない):

Repeater1.DataSource = CandIntDetails[ReqCategoryID].Values; 

をこれにより、データソースはInterviewFeedbackオブジェクトのストレートコレクションになります。これがデータソースである場合、オブジェクトのプロパティにアクセスするには、Evalを使用できます。

+0

提案していただきありがとうございます。今すぐ動作します。 –

関連する問題