2010-08-20 11 views

Antwort

8

Gefunden meine Antwort here.

Was John sagte, sind die Datenquellenelemente nur verfügbar, wenn sie datengebunden sind. Sie sind nicht mehr zugänglich nach initial loading.

Sie sollten erwägen, ein Objekt oder Objektsammlung mit darstellt Bildschirmdaten, die Sie mit dem Raster aktualisieren, dann Änderungen bestehen aus diesen auf Datenbanken.

Genauer gesagt, habe ich eine Hidden eine ID über Beiträge zu speichern, und ich fordere Daten aus der Datenbank, anstatt zu versuchen, es zu bekommen, die DataItem bilden (die nicht außerhalb des Databinding-Ereignisses verwendet werden).

HiddenField Die Steuerung wird an Speicher einen Wert verwendet, der über anhielt Stellungen auf dem Server sein muss.

+0

Nun, ich sehe keine andere Wahl. Und es funktioniert soweit ganz gut. – asmo

+0

HiddenField arbeitete für mich. Ich benutze einen Repeater und muss Daten von der Bindung an Tastenklicks beibehalten. – Cordell

+0

Das klingt nach einer guten Möglichkeit, doppelt so viele Datenbankaufrufe wie nötig zu erstellen. Scheint, als hätte DataList ein schlechtes Modell. – NetMage

1

Überprüfen Sie, ob Sie wirklich DataBind() die DataList nach jedem Postback. Normalerweise erhalten Sie DataList, GridView, DropDownList (und andere Controls) nach einem PostBack leer, wenn Sie sie nicht erneut binden.

+1

Danke für den Hinweis, aber ich wirklich die DataList sogar auf Postback wieder binden. Ich habe auch den Debugger eingecheckt, und die DataSource wird am Postback gebunden. – asmo

7

DataItem ist nur bei Datenbindung verfügbar.

Load kommt vor Click also überschreiben Sie Ihre Daten sowieso.

tun:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     BindFields(); 
    } 
} 

Sie eine Datasource (wie Object) verwenden sollten Databinding und Update/Insert zu behandeln.

Update/Beratung:

Platzhalter verwenden um Daten zu binden Sie sich selbst in Schwierigkeiten bekommen. Sie sollten entweder ein ListView, GridView, DataList oder Repeater verwenden. Ich bin mir sicher, dass jeder von Ihnen das tut, was Sie wollen, und Sie müssen weniger programmieren. Nutze deine Zeit, um sie zu lernen, anstatt zu versuchen, dies zur Arbeit zu bringen, es ist zum Scheitern verurteilt.

+0

Ich benutze bereits eine DataList (überprüfen Sie den Titel). Und ich bin gezwungen, PlaceHolder zu verwenden, da ich nicht im Voraus wissen kann, welcher Control-Typ für jedes Feld verwendet wird. Tatsächlich enthält jedes DataListItem meiner DataList ein PlaceHolder-Steuerelement, dessen Typ bei der Datenbindung ermittelt wird. – asmo

+0

Was setzen Sie also in diese Platzhalter? – Jeroen

+0

Jeder Platzhalter enthält ein Steuerelement wie TextBox, CheckBox, RadioButtonList, DropDownList usw. Ich kann den genauen Steuerelementtyp seit seiner Dynamisierung nicht kennen. Jeder Platzhalter stellt ein Feld in einem Formular dar, z. B. Name, Adresse, E-Mail, Lieblingsessen usw. – asmo