2009-01-20 12 views
7

Ich habe ein .NET repeater Steuerelement, das data-bound zu einer Liste ist. Als Teil des Repeaters Item Collection habe ich einen "Remove Button", der dieses aktuelle List-Element effektiv entfernt.Wie man ein .NET datengebundenes Repeater Steuerelement dynamisch aktualisiert

Dies funktioniert, in Code-hinter kann ich erfolgreich einen Artikel aus dem datasource des Repeater entfernen.

Mein Problem ist folgendes :, wenn ich die aktualisierte datasource zurückgesetzt und MyRepeater.DataBind() wieder aufrufen, die Repeater Schnittstelle nicht mit dem Punkt entfernt ist aufzufrischen.

Ich bin auf der Suche nach dem Ereignis, um die Repeater basierend auf der aktualisierten Liste im Wesentlichen neu zu zeichnen oder zu aktualisieren. Danke für irgendwelche Hinweise oder Beispiele.

Antwort

4

Sie benötigen hilft, die ‚DataBind‘ Methode auf Ihrer Datenquelle zu nennen, dann Aufruf ‚DataBind‘ auf Repeater-Steuerelement.

+0

Wie können Sie 'DataBind' von der Quelle aufrufen, wenn, wie in diesem Fall, die Quelle eine 'Liste' ist? –

1

Füttern Sie die aktualisierte Datenquelle?

Wenn Sie die Datenquelle in Code-Behind festlegen, müssen Sie sie mit aktualisierten Daten festlegen und dann die DataBind-Methode aufrufen.

+0

Ja. Ich aktualisiere die Datenquelle und rufe sofort die DataBind-Methode auf. –

+0

Hmm ... Vielleicht kannst du etwas von deinem Code posten. –

0

Forcing Databind wird normalerweise ausgeführt, wenn das automatische DataBind im PreRender Ereignis durchgeführt wird.

Normalerweise, wenn Sie das Entfernen in der Click-Ereignis, sollte der Repeater von selbst aktualisieren, da automatisch im PreRender, Steuerelemente auf der Seite sind DataBind(). Hier ist, was das Dokument von Microsoft sagen:

PreRender: Vor diesem Ereignis tritt jedes datengebundene Steuerelement, dessen DataSourceID-Eigenschaft festgelegt ist, ruft seine DataBind-Methode auf. tun YourItem.DataSourceID = List.ID, oder so ähnlich

source

So wahrscheinlich betroffen Sie Youritem.DataSource = Liste, aber MS vorschlagen.

Hoffe, dass es

0

Ich hatte eine ähnliche Situation ... ein Repeater an eine xmlDataSource gebunden, beide in einem UpdatePanel. Ich wollte den Benutzer nur einen Namen eingeben lassen und dann auf "Hinzufügen" klicken, um die Liste im Repeater zu aktualisieren.

Ich setze "EnableViewState" auf dem Repeater und der xmlDataSource auf False und setze "EnableCaching" auf der xmlDataSource auch auf False. Ich legte die Data-Eigenschaft der xmlDataSource, genannt DataBind für die xmlDataSource, legen Sie die DataSourceID -Eigenschaft des Repeater, dann DataBind für den Repeater genannt. Vielleicht war das Overkill ... aber es hat funktioniert. Vielleicht wird das helfen.

UPDATE: Ich habe festgestellt, dass mein ItemCommand Ereignis nicht ausgelöst wird, indem EnableViewState auf dem Repeatersteuerelement auf False setzt. Aber ich denke, Sie müssen nur EnableViewState/EnableCaching für die Datenquelle auf False setzen ... Ich habe die EnableViewState Einstellung für den Repeater auf True und jetzt scheint alles gut.

1

Ich lief so etwas mit einem Repeater Control und einer DataTable-Quelle.

Es gab keine Refresh-Methode in DataTable, aber das Aufrufen von DataTable.EnableDynamicData (typeof (DataTable)) beim ersten Laden der Seite löste das Problem.