Pergunta

Eu tenho um GridView ASP.NET que usos template colunas e controles de usuário para permitir-me para construir dinamicamente o datagrid. Agora eu estou implementando o manipulador de eventos para inserir uma linha. Para fazer isso, eu criar uma matriz de valores padrão e adicioná-lo à tabela de dados que está atuando como uma fonte de dados. No entanto, quando meu evento OnLoad é acionado no postback, todas as minhas colunas de modelo já não têm os controles de usuário. Meu gridview acaba apenas sendo todos em branco com nada nele e minha coluna botão desaparece assim (que contém a linha add, linha apagar e guardar botões).

Meu linha add evento apenas faz isso:

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

Ele é disparado a partir de um botão em um controle de usuário que de implementar como este:

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

My em evento de carregamento faz um monte de coisas na primeira execução para definir o GridView, mas eu não correr de novo usando a propriedade IsPostBack para contar.

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

Alguém tem alguma dica a respeito de porque os meus controles de usuário estão desaparecendo?

Foi útil?

Solução

Você tem que adicionar os controles para a grade em cada page_load, não apenas se é (! Postback)

Outras dicas

Você tem a EnableViewState = true nas usercontrols eo GridView?

É o AddDataGridRow () método chamado por Initialize ()? Você tem basicamente duas opções:

  1. Bind a grade em cada postagem e não usar viewstate (perda de performace)
  2. Bind the Grid apenas na primeira vez (if (! IsPostBack)), e certifique-se de que seus controles de usuário manter o seu estado de visualização.

A partir do seu código, não é claro se os controles de usuário manter viewstate eo que eles têm em si. Nem sequer é claro qual é a ordem de execução dos métodos que você mostrou. Não há lógica de ligação, por isso mesmo se você continuar a acrescentar linhas, a rede pode ainda não estar vinculado. Por favor, elaborar um pouco e mostrar toda a página codebehind.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top