2

私は質問クラスを持っています:

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

ここで、ObjectDataSource を通じてこれらの ICollection を使用できるようにし、DataSource にバインドされた Repeater を使用してそれらを表示します。<%#Eval("Question")%>を使用して質問を表示し、TextBox と<%#Bind("Answer")%>を使用して回答を受け入れます。

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

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

ここで、ユーザーの応答を取得し、関連する Question クラスに戻して保持します。

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

コマンド ボタンを追加して、コード ビハインドで MyDataSource.Update() を呼び出してみましたが、予想される Question パラメーターではなく、パラメーターなしで Update メソッドを呼び出そうとします。

コードビハインドをほとんどまたはまったく使用せずに、これらすべてを実現する簡単な方法はありますか?

すべてのビットが揃っているように見えますが、すべてをくっつけるための接着剤が不足しています。

ヘルプ!

アンソニー

4

4 に答える 4

1

bind メソッドは実際にはリピーター向けではなく、リスト内のすべてのアイテムではなく、リスト内の 1 つのアイテムのみを編集するフォームビューまたはグリッドビュー向けです。

両方で編集ボタンをクリックすると、バインドされたコントロール (バインドを使用してバインド) が表示され、保存リンクをクリックすると、コード ビハインドなしで項目がデータソースに自動保存されます。

于 2008-09-09T19:41:59.740 に答える
1

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

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
}
于 2008-09-09T18:16:42.237 に答える
0

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

于 2008-09-09T19:06:37.937 に答える
0

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

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

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

于 2008-09-10T09:53:46.837 に答える