DataItem auf Repeater.Elemente ist immer null
Ich bin festlegen der DataSource-mein repeater eine Liste (MyProducts ist eine einfache Klasse, die aus nur get - /Set-Methoden).
Nach diesem und DataBind(), sehe ich im debug-Modus, dass DataItem jeder Repeater.Elemente null ist. Wenn ein postback und versucht, zu aktualisieren MyProducts, der Repeater.Items[n].DataItem ist immer noch null und ich bin nicht in der Lage zu wirken, um meine Arbeit zu machen.
Warum nicht DataItem-set auf jeden RepeaterItem, wenn ich databind meinen repeater? Ich kann nicht Bild/Google es aus. Jeden anderen Aspekt der mein code korrekt arbeitet (die Ausgabe von Daten aus MyProducts, aspx, z.B. mit:
<asp:TextBox runat="server" id="q" Text='<%# DataBinder.Eval(Container.DataItem, "Quantity")%>'></asp:TextBox>
Mehr code:
public class MyProducts
{
public string Number
{
get; set;
}
public decimal Price
{
get; set;
}
public decimal Quantity
{
get; set;
}
public decimal Total
{
get { return Quantity * Price; }
}
}
Generieren:
public List<MyProducts> TheProducts
{
get { //Invoking webservice, getting response as xml and converting it to a list of MyProducts }
}
Meine Benutzer-Steuerung:
//Bind products in cart
r.DataSource = TheProducts;
r.DataBind();
//Debugging "r.Items[n].DataItem" now shows "null", eventhough all objects has been correctly binded
Edit #2, die debugging-Informationen. DataSource wird korrekt geladen, aber Repeater.Items[3].DataItem null ist. Es sollte einen Wert haben, richtig?
screenshot
Edit #3,
Ich bekomme es jetzt, dachte ich, DataItem war immer erreichbar, wenn die Datenquelle festgelegt ist, und nicht denken, einschließlich der vollständigen code, (ich versuchte es in Page_Load).
Nachdem der Benutzer bearbeitet eine Menge Wert, ich wollte speichern Sie die neue Menge für eine MyProducts. Ich löste es, indem Sie ein hiddenfield, das hält die id der MyProducts, so dass ich manuell suchen und Holen Sie sich die MyProducts Objekt von dort.
Dank emremp, Mark Avenius und alle anderen, die aufgeschlagen in.
Ich bearbeitet meine post und eingefügt mehr von dem code. Obwohl, es ist ziemlich basic, ich denke nicht, dass es Sie geben wird, keine Klärung. Ich hatte "gehofft" habe ich etwas verpasst, einfach und jemand könnte darauf hinweisen, dass es sich für mich. Ich finde es sehr eigenartig, dass ich in der Lage bin, zu binden MyProduct-Objekte, sondern DataItem null ist ...
Was versuchst du hier zu erreichen? Hat Ihr "Quantität" erhalten Sie gebunden mit dem repeater?
Ja, Quantität ist eine Eigenschaft von MyProducts die bekommt gebunden an eine TextBox, so dass Benutzer können es Bearbeiten. Dies funktioniert wie erwartet. Benutzer sollten in der Lage sein, um die Anzahl ändern, dann auf "Speichern" klicken und den code in einer Schleife durch r.Dinge, spart Menge für jedes Objekt MyProducts
Probieren Sie es einfach <%#Eval("Menge")%>
InformationsquelleAutor Certs | 2010-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für welchen Zweck brauchen Sie die gesamte Liste? Nachdem die Seite gerendert wird, wird die Liste, an dem der Repeater gebunden ist, nicht beibehalten. Wenn Sie brauchen, um es zu halten, kann man Sie in die Sitzung und rufen es als notwendig (auf Page_Load, z.B.):
Könnten Sie auch diese in Ihre getter - (sehen Sie in der ersten Sitzung, und rufen Sie den webservice falls erforderlich):
InformationsquelleAutor Mark Avenius
http://www.netnewsgroups.net/aspnet/t4049-question-repeater-dataitem.aspx
"DataItem ist es nur für die item-creation-Prozess, ItemCreated
und ItemDataBound-Methoden (ItemCreated, wenn es passiert durch Aufruf von
DataBind)."
können Sie hinzufügen ItemDataBound-Methode und versuchen, ein DataItem.
Ich meine r_ItemDataBound(Object Sender, RepeaterItemEventArgs e) Methode nicht eine neue ItemDataBound-Methode.
InformationsquelleAutor emremp