2009-05-03 6 views
5

以下の要求を解決するための最善の行動を推薦する人がいます:.Net Repeaterは単一のオブジェクトに相当しますか?

私はRepeaterクラスをベースとして多数の拡張クラスを作成しており、柔軟性、使いやすさ、結果を愛しています。私が今したいことは、単一のオブジェクト(つまり、IListSourceまたはIEnumerableを実装していないDataSource)に対して同様のカスタムWebコントロールを作成することです。リピータを拡張し、オブジェクトを保持するために1項目のリストを使用してデータソースを設定し、次にデータバインディングを設定することで、私が達成しようとしている構造を作りました。

e.g a rough example: 

    Dim oObj as New MyObject(1) 
    Dim gl As New Generic.List(of MyObiect)() 
    gl.Add(oObj) 
    rpt.DataSource = gl 
    rpt.DataBind() 

これは私が行うことができるようにしたいと思い何の事、周りの小さなハックのように思えるん以下の通りです:私は様々な変数でこのカスタムコントロールを定義することがしたい

e.g new call, where my control is the new custom control: 

    Dim oObj as New MyObject(1) 
    myControl.DataSource = oObj 
    myControl.DataBind() 

とプロパティは、結果はそのレイアウトの以下のタイプを有効にします:

<My:ObjControl ID="frm" runat="server"> 
    <Tabs> 
     <My:Tab name="Details"> 
      <Items> 
       <My:Item Type="Text" Label="First Name" Property="FirstName" /> 
       <My:Item Type="Text" Label="Last Name" Property="LastName" /> 
       <My:Item Type="Text" Label="Title" Property="Title" /> 
      </Items> 
     </Tab> 
     <My:Tab name="Address"> 
      <Items> 
       <My:Item Type="Text" Label="Address 1" Property="Address1" /> 
       <My:Item Type="Text" Label="Address 2" Property="Address2" /> 
       <My:Item Type="Text" Label="Address 3" Property="Address3" /> 
      </Items> 
     </Tab> 
    </Tabs> 
</My:ObjControl> 

この実装では、それは理想的なアプローチだろうMVCを使用してのように見えますが、Webフォームを使用して行われなければなりません上記を考慮して。これを行うことで、リフレクション(特定のインターフェイスを実装するすべてのクラスで使用可能)を使用する柔軟なWebControlを作成し、必要なフォームを生成することができます。

オブジェクトを受け取り、それに応じてデータソースを設定して時間を節約するカスタムリピータ(DataObject)にプロパティを追加するだけですか?それとも良い方法がありますか?

これはすべて意味があります。

乾杯、 スティーブ

答えて

5

あなたはリピーターがリストを望んでいるという事実を回避するのは難しいへの道をしようとしているし、あなたはそれを1つのインスタンスを与えたいです。ちょうど新しいリスト* oObj)でそれを包んでください。それはいつも終わっている。

私は確かに彼らが知っていることは、カスタムサーバーコントロールで起こっていることを知りません。あなたはもう一度やり直そうとしているようです。

<asp:repeater id="whatever" runat=server> 
    <ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate> 
</asp:repeater> 
+0

わかりましたが、思考プロセスを乗り越えるのは非常に難しいですが、私のコントロールが達成するのは、2つのliタブ「詳細」と「アドレス」の間にタブとラベルとマッチングオブジェクトを更新できるフォーム要素。あなたが示したことは、その点を完全に見逃してしまいました。おそらく質問の言葉遣いに私のせいです。 もちろん、私はちょうどEval( "FirstName")とすることができます。 – stibstibstib

+1

まだこれを行うには、いくつかのタブのために多くの作業をすると、リピーターをお勧めします。はい、私はあなたの質問を完全に理解していません。私はEvalを使用していません。DataBinder.Evalはそれを行う1.0の方法です。まだ変更する理由はありません。 –

2

私はstibstibstibを完全に理解しています。また、ASP.NET Frameworkには、ListViewのようなテンプレート駆動型のサーバーコントロールが付属していますが、単一のデータオブジェクト用です。リピータとリストビューで動作させるために、単一の項目からリストを作成することは不必要で、ちょっと気分が悪いようです。私はそれが動作することを得る。私はそれが簡単な解決策であることを知っています。しかし、ASP.NETはフレームワークであり、修正する必要がある省略形のように見えます。この記事http://gadgetopia.com/post/5343は、Webサイト上のコンテンツを表示する基本的な方法が2つあります。1つのアイテムとして、そしてリストにあるアイテムとしてです。 ASP.NETにはItemViewサーバーコントロールのようなものはありません。

関連する問題