2010-11-19 15 views
0

Ich habe ein Benutzersteuerelement mit einer Reihe von Methoden. Ich habe auch ein Dataset-Objekt, das ich in einer Methode ausfülle, aber ich muss auch auf das gleiche Dataset (und die darin enthaltenen Daten) in einem anderen zugreifen.Teilen eines Objekts zwischen Methoden in derselben Klasse (mit Postback)

Ich fülle das Dataset aus einigen XML, die ich von einem Webservice bekomme, wenn jemand auf eine Schaltfläche klickt. Die Daten aus dem Dataset werden dann an ein Listbox-Steuerelement gebunden. Wenn jemand ein Element im Listensteuerelement auswählt (ich habe autopostback auf true gesetzt), feuert es dann eine andere Methode ab und es ist diese Methode, auf die ich auf die Daten im Dataset zugreifen muss, aber wenn ich das unmittelbare Fenster überprüfe, sagt es mir dass das Dataset auf null festgelegt ist.

Wohin gehe ich falsch?

Edited psuedocode hinzufügen

//Dataset 
DataSet dsAddress; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Nothing happens to DataSet here 
} 
protected void btnPostCode_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     // Dataset has data added here 
    } 
    catch (Exception ex) 
    { 
     lblError.Text = ex.Message.ToString(); 
    } 
    if (!DataHelper.DataSourceIsEmpty(dsAddress)) 
    { 
     //Dataset bound to listbox here 
    } 

} 

protected void lstAddressDropdown_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Need to access dataset here  
} 
+0

Können Sie den Code veröffentlichen, in dem Sie das Dataset deklarieren und erklären, zu welcher Zeit während des Seitenlebenszyklus Sie es füllen? – Oded

Antwort

1

Wenn die Daten die gleiche für alle Benutzer des Systems (unabhängig von der Sitzung) ist, machen die Datenmenge statisch oder Speichern Sie im Anwendungsobjekt.

Andernfalls, wenn es pro Sitzung ist, speichern Sie im Session-Objekt, aber vergessen Sie nicht, aufzuräumen, nachdem es nicht mehr benötigt wird.

Meiner Meinung nach ist es unklug, es im Viewstate zu speichern, da dies viel zusätzlichen Traffic erzeugt und das System mit Serialisierung und Deserialisierung verlangsamt.

+0

Es ist nur auf dieser einen Seite. Es wird am Ende zerstört werden. –

+0

Nun, Sie könnten den Viewstatus berücksichtigen, aber das hängt wirklich von der Menge der Daten im Dataset ab. Wie viele Zeilen reden wir? – andrewjs

+0

Nicht sicher, wie viele. Könnte 5 sein, könnte 20 sein. Ich dachte, dass es möglich ist, denselben Datensatz über Methoden in derselben Klasse zu teilen, wenn er in einer Klasse, aber nicht in einer Methode deklariert wurde. –

1

Sie Session-Variablen verwenden können, können Sie Ihre Daten-Set in einer Sitzungsvariablen speichern und Zugriff auf die Daten util Sitzung

abgelaufen
0

Wann bevölkern Sie den Datensatz? Kannst du es nicht einfach wieder auffüllen? Es sollte in Init für Benutzersteuerelemente ausgefüllt werden, vorausgesetzt, dass keine Postback-Informationen erforderlich sind, um die Daten abzurufen.

+0

Leider ist die Datenbank von einem Web-Service von Drittanbietern befüllt, die eine Gebühr pro Anruf kostet. –

Verwandte Themen