2009-05-14 11 views
15

人がクラスリピーターをリスト<Person>にバインドすると、バインドされた項目も更新できますか? (2ウェイ)

で定義されている人

class Person 
{ 
    string Forename 
    { 
     get;set; 
    } 
    string Surname 
    { 
     get; set; 
    } 
} 

そして、これを次のようなaspリピータコントロールにバインドします:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <asp:Label ID="lblForename" runat="server" Text="Forname" AssociatedControlID="txtForename" /> 
     <asp:TextBox ID="txtForename" runat="server" Text='<%# ((Person)Container.DataItem).Forename %>' /> 
     <br /> 
     <asp:Label ID="lblSurname" runat="server" Text="Forname" AssociatedControlID="txtSurname" /> 
     <asp:TextBox ID="txtSurname" runat="server" Text='<%# ((Person)Container.DataItem).Surname %>' /> 
     <br /> 
    </ItemTemplate> 
</asp:Repeater> 

ユーザーが入力したデータをオブジェクトに戻しますか?

私は、データバインディングの全体的なポイントは、これが効果的にあなたのために処理されたと思ったが、Repeater1.Itemsコレクションを調べると、変更は加えられていない。

//This is only intended to be pseudo code 
for each item in Repeater1.Items 
    ((Person)item.DataItem).Forename = item.FindControl("txtForname").Text; 
end for 

の行に沿って何かを行うコードを記述する必要があります。その場合、DataItemプロパティは常に空白なのですか?

追加情報:

の効果を既に呼び出しています。Bind("Forename")を使ってみましたが、これはTextBoxから情報を戻すようには見えません私はこれを手動で行う必要がありますか?

答えて

8

単純な答えを使用することができますようにRepeaterコントロールが、探している種類の双方向データバインディングをサポートしていないことです。さらに、DataItemプロパティはリピータアイテムの作成時にのみ使用され、ItemDataBoundイベントの後は何も設定されません。そのため、(あなたの擬似コードでやっているように)ポストバック後に特定のリピータ項目を作成するときに使用した元のオブジェクトを取得するために、そのプロパティを使用することはできません。

提案したようにリピータアイテムをループする必要があります(何かをする前にアイテムがListItemType.ItemまたはAlternatingItemであることを確認してからテキストボックスから値を抽出し、 。

+0

私が望んでいた答えではありませんが、あなたが正しいと思われます。 – ilivewithian

2

上記に加えて、リピータをリストにバインドする必要もあります。今のテキストボックスはForenameの値に割り当てられている(またはあなたが

<# Bind("Forename") %> 

タグを使用している場合potentaillyバインド)が、リピータコンテナが何のDataItemを持っていません。あなたは人のリストを持つリピータをバインドした場合

7

あなたが欲しい

this.Repeater1.DataSource = GetPersons(); 

ながらGetPersons()である人物のリストを返すメソッドは オブジェクトあなたは

<asp:TextBox ID="txtForename" runat="server" Text='<%# Eval("Forename") %>' /> 
+4

いいえ、これはリピーターにデータを入力しますが、ユーザーが入力したデータは戻されません。 Evalは片方向データバインディング、質問は双方向データバインディングに関する質問です。 –

関連する問題