Frage

Ich bin die Bindung an ein Dropdown-Menü. Es arbeitet auf der Anfangslast. Bei nachfolgenden Lasten (Postbacks) es nicht die Elemente in der Dropdown-Liste aktualisieren.

using (DataView dv = dtProductGroup.DefaultView)
{
        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
}

Ich habe auf den Postbacks bestätigt, dass die Daten an den Drop-Down-gebunden wird, und Elemente werden hinzugefügt. Aber wenn die Seite macht der Drop-Down hat keine der neuen Werte.

Ich sehe zwei Möglichkeiten: Die Steuerung ist Rendering nicht die neuen Werte oder die Werte gelöscht werden. Ich bin ratlos, wo für mögliche Probleme zu suchen.

Bearbeiten

Ich entdeckte das Problem. Die Dropdownlist wurde in einem Conditional Update eingebettet. Einfach "UpdatePanel.Update ();" Aufruf das Problem gelöst.

War es hilfreich?

Lösung

Beim Postback der Ansichtszustand wird wieder angelegt + Sie gesagt Sie versuchen, wieder Werte zu laden. Ich würde vorschlagen, Ansichtszustand trägt die ganze Gewicht auf Postbacks im Stich gelassen. Nur die Werte geladen werden, wenn die Seite zuerst durch Zugabe getroffen wird if (! IsPostBack) wie so

using (DataView dv = dtProductGroup.DefaultView)
{
   if (! IsPostBack) {

        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
   }
}

Edit: Außerdem gewährleistet die Syntax des Dataview-Objekt durch dv verwiesen wird verworfen, wenn der Codeblock beendet. Meine zweite Vermutung ist, dies führt zu einem Nebeneffekt, dass das Problem verursacht.

using (DataView dv = dtProductGroup.DefaultView)
{

verlassen Anstatt die Verwendung aus und schreiben Sie eine regelmäßige declaratoin wie folgt aus (Dataview zusammen mit allem, was zu entsorgenden wird anders, wenn die Seite fertig ist Rendering, so gibt es wirklich keine Notwendigkeit, es selbst zu tun).

DataView dv = dtProductGroup.DefaultView;

Sehen Sie die MSDN-Dokumentation über 'mit' und IDisposable für detaillierte Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top