2 Stimmen

ASP.NET ObjectDataSource Bindung automatisch an Repeater - möglich?

Ich habe eine Frageklasse:

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

Jetzt mache ich eine ICollection von diesen über eine ObjectDataSource verfügbar und zeige sie mit einem Repeater an, der an die DataSource gebunden ist. Ich verwende <%#Eval("Frage")%> um die Frage anzuzeigen, und ich verwende eine TextBox und <%#Bind("Antwort")%> um eine Antwort zu akzeptieren.

Wenn meine ObjectDataSource drei Question-Objekte zurückgibt, dann zeigt mein Repeater die drei Fragen mit einer TextBox nach jeder Frage an, damit der Benutzer eine Antwort geben kann.

Bis jetzt funktioniert es hervorragend.

Jetzt möchte ich die Antwort des Benutzers nehmen und sie in die entsprechenden Frageklassen zurücklegen, die ich dann beibehalten werde.

Sollte der Rahmen das nicht alles für mich erledigen? Ich habe die Bind-Methode verwendet, ich habe eine DataSourceID angegeben, ich habe eine Update-Methode in meiner ObjectDataSource-Klasse angegeben, aber es scheint keine Möglichkeit zu geben, die ganze Sache tatsächlich zu starten.

Ich habe versucht, eine Befehlsschaltfläche hinzuzufügen und im Code dahinter MyDataSource.Update() aufzurufen, aber es wird versucht, meine Update-Methode ohne Parameter aufzurufen, anstatt den erwarteten Parameter Question.

Gibt es nicht eine einfache Möglichkeit, all dies mit wenig oder gar keinem Code zu erreichen?

Es scheint so, als wären alle Teile vorhanden, aber es fehlt etwas Klebstoff, um sie alle zusammenzuhalten.

Hilfe!

Anthony

1voto

Ben Scheirman Punkte 39742

Sie müssen das Postback-Ereignis (Klick auf eine Schaltfläche oder was auch immer) behandeln und dann die Repeater-Elemente wie folgt auflisten:

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
}

1voto

Solmead Punkte 3999

Die bind-Methode ist nicht wirklich für den Repeater, es ist mehr für die formview oder gridview, wo Sie nur ein Element in der Liste nicht jedes Element in der Liste zu bearbeiten sind.

In beiden Fällen klicken Sie auf die Schaltfläche "Bearbeiten", die Ihnen die gebundenen Steuerelemente anzeigt (gebunden mit bind), und klicken dann auf den Link "Speichern", der das Element automatisch wieder in Ihrer Datenquelle speichert, ohne dass Code dahinter steht.

0voto

littlecharva Punkte 4194

Was ist dann der Punkt in der Bind-Methode (im Gegensatz zu der Eval-Methode), wenn ich alles wieder manuell auf Postback binden muss?

0voto

littlecharva Punkte 4194

Ben: Nachdem ich es ausprobiert habe, ist item.DataItem immer null, und laut dem folgenden Beitrag ist es nicht dafür gedacht, auf diese Weise verwendet zu werden:

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

Wie in aller Welt kann ich sie also manuell zurückbinden?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X