Postback destrói controles de usuário em minhas colunas GridView
-
05-07-2019 - |
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?
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:
- Bind a grade em cada postagem e não usar viewstate (perda de performace)
- 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.