質問

Question クラスがあります。

class Question {
    public int QuestionNumber { get; set; }
    public string Question { get; set; }
    public string Answer { get; set; }
}

ここで、これらの ICollection を ObjectDataSource を通じて利用できるようにし、DataSource にバインドされたリピーターを使用して表示します。私が使う <%#Eval("質問")%> 質問を表示するには TextBox を使用します。 <%#Bind("Answer")%> 答えを受け入れること。

ObjectDataSource が 3 つの Question オブジェクトを返した場合、Repeater は 3 つの質問を表示し、ユーザーが回答できるように各質問の後に TextBox を表示します。

これまでのところ、うまく機能しています。

次に、ユーザーの応答を取得して関連する Question クラスに戻し、それを永続化したいと思います。

本当にフレームワークがこれらすべてを処理してくれるのでしょうか?Bind メソッドを使用し、DataSourceID を指定し、ObjectDataSource クラスで Update メソッドを指定しましたが、実際にすべてを開始する方法はないようです。

コマンド ボタンを追加し、背後のコードで MyDataSource.Update() を呼び出そうとしましたが、予期される Question パラメータではなく、パラメータなしで Update メソッドを呼び出そうとしました。

分離コードをほとんどまたはまったく使用せずに、これらすべてを実現する簡単な方法はあるでしょうか?

パーツはすべて揃っているように見えますが、すべてを貼り付けるための接着剤が不足しています。

ヘルプ!

アンソニー

役に立ちましたか?

解決

ポストバック イベント (ボタンのクリックなど) を処理してから、次のようにリピーター アイテムを列挙する必要があります。

foreach(RepeaterItem item in rptQuestions.Items)
{
   //pull out question
   var question = (Question)item.DataItem;
   question.Answer = ((TextBox)item.FindControl("txtAnswer")).Text;

   question.Save() ?  <--- not sure what you want to do with it
}

他のヒント

バインド メソッドは実際にはリピーター用ではなく、リスト内のすべての項目ではなく、リスト内の 1 つの項目だけを編集するフォームビューまたはグリッドビュー用です。

どちらの場合も、編集ボタンをクリックすると、バインドされたコントロール (バインドを使用してバインド) が表示され、保存リンクをクリックすると、背後にコードを作成せずにアイテムがデータソースに自動的に保存されます。

では、ポストバック時にすべてを手動でバインドする必要がある場合、(Eval メソッドではなく) Bind メソッドには何の意味があるのでしょうか?

ベン:試してみると、 item.DataItem は常に null であり、次の投稿によると、そのように使用するように設計されていません。

http://www.netnewsgroups.net/group/microsoft.public.dotnet.framework.aspnet/topic4049.aspx

では、一体どうやって手動でバインドし直すのでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top