2011-12-08 4 views
0

format the data should be displayedシナリオに適したデータコントロールはどれですか?

私は、画像に記載されているようにサブスクライバのリストを表示する仕事があります。このシナリオでASP.NETのどのデータコントロールが最適であるかを知りたいと思います。私はListviewで遊んでいるだけですが、私はここから人々の意見を得たいと思います。ありがとうございました。ファラズ。

Update1:​​グリッドビュー(リストビュー内にネストされたリスト)をここで使用する必要がありますか?または、単一のリストビューで行うことはできますか?

+0

GridViewコントロールを見てみましょう。また、2つのコントロールの比較については、これを確認してください(http://stackoverflow.com/questions/891918/grid-view-vs-list-view)。 – AlexB

答えて

1

明らかに、グリッドビューは、(おそらく自動生成列で最小限の労力で)望ましい表形式のレイアウトを提供します。

ただし、ページング、並べ替え、編集が必要な場合は、リピータコントロールを使用することになります。主な理由は、マークアップを正確に制御することです。たとえば、グリッドビューでは、<colgroup><thead>などの要素はサポートされていません(レイアウトにはこれらの要素は必要ありません)。ページング/並べ替え/編集などが必要な場合は、ListViewを使用するのが適切です。

複数の表を表示する限り、ネストされたコントロールを使用することができます。たとえば、リピータ/リストビューでグリッドビューをネストすることができます。

EDIT:
あなたが持っているデータの構造についても、必要な正確なレイアウトについて非常に明確ではありません。だからここに私が仮定している - あなたは単一のList<Subscriber>が両方のルートの加入者とその子供を含んでいる。また、レイアウトでは、ルートサブスクライバの1つのテーブルとそれに続く複数のテーブル(各ルートサブスクライバの子に1つ)が必要です。

マークアップは、これはこれはあなたの進め方についていくつかのアイデアを与えるだろう、このような

protected IEnumerable<Subscriber> GetRootSubscribers() 
{ 
    // I am not sure how you decide if a subscriber is a parent or not, I have just 
    // illustrated a condition where you have a parent id field to indicate the same 
    return allSubscribers.Where(s => s.ParentID == null); 
} 

protected IEnumerable<Subscriber> GetChildSubscribers(object memberId) 
{ 
    // I am not sure how you decide a child subscriber, I have just 
    // illustrated a condition where you have a parent id field to indicate the same 
    return allSubscribers.Where(s => s.ParentID.Equals(memberId)); 
} 

// bind the outer repeater to root list 
Outer.DataSource = GetRootSubscribers(); 
Outer.DataBind(); 

として2つのコードビハインド方法の希望によってサポートされます

<asp:Repeater runat="server" ID="Outer" > 
    <HeaderTemplate> 
    <%-- Put a grid here for parent --> 
    <asp:GridView runat="server" ID="Root" DataSource='<%# GetRootSubscribers() %>' > 
     ... column def etc 
    </asp:GridView> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <!-- Put a grid here for children for current root subsriber --> 
    <asp:GridView runat="server" ID="Child" DataSource='<%# GetChildSubscribers(Eval("MemberID")) %>' > 
     ... column def etc 
    </asp:GridView> 
    </ItemTemplate> 
</asp:Repeater> 

のようなものになります。

+0

ちょっとありがとう..しかし、私の場合、私はgridviewsのリストを表示する必要があります(加入者が持つことができる数字の子供の加入者に基づいて、この数は動的です)。アドバイス – nfa379

+0

@ nfa379、回答として、リピータ(またはリストビュー)内のグリッドビューをネストする必要があります。外側リピータは、表示されるグリッドの数と同じ数を持つソースにバインドする必要があります。厳密な仕組みは、加入者データをどのように取得するかによって異なります。それはデータテーブル、データセット、オブジェクトグラフですか? – VinayC

+0

リストです。 – nfa379

1

私にとってこれは通常のヘッダーテキストを持つGridViewです。上の最初のバーは、グリッドの前に他のコントロールや純粋なHTMLで作成することができます。 ListViewsはグリッドではなく、最終的な予想結果がグリッドに近いときは使用しないでください。

+0

お返事ありがとうございました。しかし私の場合は、グリッドビューのリストを表示する必要があります(サブスクライバが持つことができる子サブスクライバの数に基づいて、この数は動的です)。ご意見をお聞かせください。 – nfa379

関連する問題