Pergunta

Eu tenho um gridview que tem seu conjunto de DataSourceID propriedade para um objeto ObjectDataSource personalizado. Quando AllowPaging é definida como True, o GridView desaparece depois de um postback. Se eu definir AllowPaging para Falso tudo bem. Alguém pode lançar alguma luz sobre isso para mim? :)

Editar: A outra coisa que eu estou confuso sobre se eu pensava que se você definir o DataSourceID que a rede iria receber dados da fonte de dados sempre que ele precisava. Se a grade está desaparecendo porque não está segurando os dados, porque não é o gridview obter os dados de que necessita a partir da fonte de dados?

Foi útil?

Solução

É possível que, após a postagem ocorre a fonte de dados não está sendo mantido ou recarregados e não há itens para preencher a grade. Você está lidando estado corretamente para o objeto fonte de dados (religação / mantendo a fonte viva) quando paginação está habilitado?

Isto pode soar como uma resposta vaga, mas sem um exemplo de como a fonte é obter os dados que é meio difícil de diagnosticar por que os itens teria ido.

Edit:
O método que eu estava pensando era para paginação callback / classificação. No entanto ENTENDI encontrar algumas informações ont ele ODS & paginação .. certifique-se de ter definido o seguinte:

  1. GridView: AllowPaging e fora do curso você precisa definir PageSize.
  2. ObjectDataSource: EnablePaging, também é necessário definir o:
    • MaximumRowsParameterName = "maxRows"
    • StartRowIndexParameterName = "StartRowIndex"
    • SelectCountMethod = "RecordCount"

Eu acho que você só precisa definir os itens 3 sub no item 2, se você deseja manipular o tamanho de paginação etc manualmente.

Em seguida, você pode ler mais acima neste aqui .

Outras dicas

Para responder a mais de resposta de @ adam0101, o Acho ele quer dizer com "... Acontece que meu costume fonte de dados estava retornando zero para o registro contagem ." , é que você pode precisar de " re-anexar " a fonte de dados para o gridview. ASP.net sabe que você automaticamente está retriving recorde-'n', onde 'n' é a próxima primeira linha da página seguinte. Esta solução é mais para casos em que você não deseja permitir asp.net para tratar automaticamente os dados em seu gridview, talvez devido a querer carregar dados após o outro evento (um botão LOAD DATA por exemplo) , e não quando a página foi carregada pela primeira vez. Mas, como Adam mencionados abaixo a verdadeira razão foi que ele "... criou uma subclasse de fonte de dados que herdou ObjectDataSource, mas foi implementado incorretamente.". Desculpem a minha suposição não Adam. Graças

No entanto, o resto da minha solução que eu acho que vai funcionar para aqueles preso em usar fontes de dados derivados manualmente.

ie

Defina o seu GridView conforme acima, e nota - sem uma propriedade DataSource! Aqui está o meu exemplo:

     <asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server" 
            ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">

Em seguida, faça um método particular ou rotina que você pode chamar sempre que você precisar forçar o gridview em uma nova página.

private void BindGridViewServer(GridView gv1)
{
    gv1.DataSource = sdsStudents;   //re-attach the datasource
    gv1.DataBind();                 //get a page of data AllowPaging must be true
}

Em seguida, crie o método OnPageIndexChanging:

protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView myGV = (GridView)sender;
    myGV.PageIndex = e.NewPageIndex;
    BindGridViewServer(myGV);
}

Por uma questão de completar a resposta, aqui está o meu código onde eu carregar os dados quando eu quero - não quando um PostPack é disparado, que é o padrão ...

    protected void btnSEARCH(object sender, EventArgs e)
        {
//some code
                    //bind the gridview to the datasource here and then bind!
                    gvStudents.DataSource = sdsStudents;
                    gvStudents.DataBind();
//more code etc
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top