Domanda

Ho un ASP.NET GridView che utilizza colonne modello e controlli utente per consentirmi di costruire dinamicamente il datagrid. Ora sto implementando il gestore eventi per l'inserimento di una riga. Per fare ciò, creo un array di valori predefiniti e lo aggiungo alla tabella dei dati che funge da origine dati. Tuttavia, quando il mio evento OnLoad viene generato al postback, tutte le colonne del mio modello non dispongono più dei controlli utente. Il mio gridview finisce per essere completamente vuoto senza nulla e anche la mia colonna di pulsanti scompare (che contiene la riga aggiungi, elimina riga e salva i pulsanti).

Il mio evento di aggiunta riga fa proprio questo:

    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);
    }

Viene attivato da un pulsante in un controllo utente implementato in questo modo:

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

Il mio evento on load fa un sacco di cose alla prima esecuzione per impostare GridView, ma non lo eseguo di nuovo usando la proprietà IsPostBack per dirlo.

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

Qualcuno ha qualche suggerimento sul motivo per cui i miei controlli utente stanno svanendo?

È stato utile?

Soluzione

Devi aggiungere i controlli alla griglia su ogni page_load, non solo se è (! Postback)

Altri suggerimenti

Hai EnableViewState = true sui controlli utente e GridView?

Il metodo AddDataGridRow () è chiamato da Initialize ()? Fondamentalmente hai due opzioni:

  1. Associa la griglia a ogni postback e non usa viewstate (perdita di performance)
  2. Associa la griglia solo la prima volta (if (! IsPostBack)) e assicurati che i controlli utente mantengano il loro stato di visualizzazione.

Dal tuo codice, non è chiaro se i controlli utente mantengano viewstate e cosa abbiano al loro interno. Non è nemmeno chiaro quale sia l'ordine di esecuzione dei metodi che hai mostrato. Non esiste una logica di associazione, quindi anche se continui ad aggiungere righe, la griglia potrebbe non essere ancora associata. Si prega di elaborare un po 'e mostrare l'intero codice della pagina dietro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top