Frage

Ich habe eine ASP.NET Gridview, die Template-Spalten und Benutzer-Steuerelemente verwendet, mir zu erlauben, um dynamisch die Datenraster zu konstruieren. Jetzt bin ich Implementierung der Event-Handler für eine Zeile eingefügt wird. Um das zu tun, erstelle ich eine Reihe von Standardwerten und fügen Sie ihn in die Datentabelle, die als Datenquelle fungiert. Wenn jedoch mein OnLoad-Ereignis auf Postback ausgelöst wird, sind alle meine Vorlage Spalten haben nicht mehr die Bedienelemente. Meine gridview landet nur alle leer ist mit nichts drin und meine Tastenspalte und verschwindet (die die Add Zeile enthält, Zeile löschen und speichern Tasten).

Meine Zeile hinzufügen Ereignis gerade tut dies:

    public void AddDataGridRow()
    {
        List<object> defRow = new List<object>();

        for (int i = 0; i < fieldNames.Count; i++)
        {
            defRow.Add(GetDefaultValueFromDBType(types[i]));   
        }

        dt.Rows.Add(defRow);
    }

Es wird von einer Schaltfläche in einem Benutzersteuer abgab, die wie folgt implementieren:

    protected void Button1_Click(object sender, EventArgs e)
    {
        ((Scoresheet)(this.Page)).AddDataGridRow();
    }

Meine auf Load-Ereignis tut ein paar Sachen bei der ersten Ausführung die Gridview bis zu setzen, aber ich laufe nicht, dass wieder durch die IsPostBack Eigenschaft verwenden zu erzählen.

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

Wer noch keine Hinweise, warum meine Bedienelemente verschwinden?

War es hilfreich?

Lösung

Sie haben die Bedienelemente an das Netz, auf jedem page_load hinzufügen nicht nur, wenn es (! Postback)

Andere Tipps

Haben Sie die EnableViewState = true auf die Benutzersteuerelemente und das Gridview?

Ist das AddDataGridRow () -Methode durch Initialisieren () aufgerufen? Sie haben grundsätzlich zwei Möglichkeiten:

  1. Binden Sie das Gitter auf jedem Postbacks und keine Ansichtszustand (Performace Verlust)
  2. verwenden
  3. Binden Sie nur das Gitter das erste Mal (if (! IsPostBack)), und stellen Sie sicher, dass Ihre Benutzer steuern ihren Ansichtszustand zu halten.

Von Ihrem Code ist es nicht klar, ob die Bedienelemente halten Ansichtszustand und was sie in ihnen haben. Es ist nicht einmal klar, was die Ausführungsreihenfolge der Methoden ist es, Sie gezeigt haben. Es gibt keine verbindliche Logik, so dass selbst wenn Sie Zeilen halten das Hinzufügen, kann das Gitter noch nicht gebunden werden. Bitte erarbeiten ein wenig und zeigen die ganze Seite Code-Behind.

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