O GridView não se lembra do estado entre postbacks
Eu tenho uma página ASP simples com grade de dados (vinculada a uma fonte de objeto). A grade está dentro da página de um assistente e tem uma caixa de seleção 'selecionar' para cada linha.
Em um estágio do assistente, vinculo o GridView:
protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
...
// Bind and display matches
GridViewMatches.EnableViewState = true;
GridViewMatches.DataSource = getEmailRecipients();
GridViewMatches.DataBind();
E quando o botão Concluir é clicado, eu percorro as linhas e verifico o que está selecionado:
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
// Set the selected values, depending on the checkboxes on the grid.
foreach (GridViewRow gr in GridViewMatches.Rows)
{
Int32 personID = Convert.ToInt32(gr.Cells[0].Text);
CheckBox selected = (CheckBox) gr.Cells[1].FindControl("CheckBoxSelectedToSend");
Mas, nesta fase, GridViewMatches.Rows.Count = 0! Não religo a grade, não preciso, certo? Espero que o estado de exibição mantenha o estado. (Além disso, se eu reconectar a grade, minhas caixas de seleção serão limpas)
Nota: esta página também adiciona dinamicamente controles de usuário no método OnInit. Ouvi dizer que ele pode mexer com o estado de exibição, mas, pelo que sei, estou fazendo isso corretamente e o estado de exibição desses controles adicionados parece funcionar (os valores são mantidos entre as postagens)
Agradecemos antecipadamente por qualquer ajuda!
Ryan
ATUALIZAÇÃO: Isso pode estar relacionado ao fato de eu estar configurando a fonte de dados programaticamente? Gostaria de saber se o mecanismo asp estava vinculando a grade durante o ciclo de vida da página a uma fonte de dados que ainda não estava definida. (Em uma página de teste, o GridView é 'automaticamente' vinculado '. Não quero que a grade seja ligada novamente; só quero os valores do viewstate da postagem anterior!
Além disso, tenho isso no cabeçalho asp: ViewStateEncryptionMode = "Never" - isso foi para resolver uma mensagem ocasional 'Invalid Viewstate Validation MAC'
Para referência, meu GridView é definido da seguinte maneira:
<asp:GridView ID="GridViewMatches" runat="server" AllowSorting="True" AutoGenerateColumns="False"
BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3"
OnDataBinding="GridViewMatches_OnBinding">
<Columns>
<asp:BoundField DataField="PersonID"><ItemStyle CssClass="hidden"/></asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBoxSelectedToSend" runat="server"
Checked='<%# DataBinder.Eval(Container.DataItem, "SelectedToSend") %>'/>
</ItemTemplate>
...