none
Performance desse código para edição no GridView RRS feed

  • Pergunta

  • Olá.
    Estava fazendo um código só para estudo mesmo, fazendo um grid com edição no próprio Grid, porem fiquei meio assim em questão a performance do código, a já visto que para cancelar a edição de uma linha eu preciso ir até o banco e selecionar todos os dados novamente. Para deixar um item como editável, preciso tambem ir no banco e carregar tudo novamente, conforme o código abaixo:

    // Deixar linha como editável
    
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                Grid();
            }
    
    // Cancelar o comando para edição
    
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
            {
                GridView1.EditIndex = -1;
                Grid();
            }
    
    // Carregando os dados no GridView
    
    protected void Grid()
            {
                con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("teste.mdb") + ";Persist Security Info=False");
                adp = new OleDbDataAdapter("SELECT * FROM tacas", con);
                ds = new DataSet();
                adp.Fill(ds);
    GridView1.DataSource = ds;
                GridView1.DataBind();
    
            }

    Eu que fiz da forma errada, ou é isso mesmo que deve ser feito? Tem alguma forma melhor?

    Pensei em por os dados iniciais do GridView no ViewState, ai para marcar a linha como editável e cancelar o comando eu pego do viewstate.... Ajudaria?

    Obrigado

    sábado, 6 de março de 2010 17:53

Respostas

  • Bom geralmente é feito desse jeito que você postou. Mas pode ser feito umas melhorias de código e performance.

    1) Popular a gridview com um objeto do tipo List<> pois ocupa bem menos espaço em memória que um DataSet.
    2) Utilizar um bloco de try catch dentro do método Grid() para manipular os erros caso aconteçam.
    3) O objetivo é reduzir o viewstate pois este influencia na performance. Então evite guardar objetos no viewstate e desabilite o viewstate quando não estiver utilizando.
    4)Existem outras melhorias mais avançadas como Cache e customização de gridview para não renderizar um table com o ListView, mais com essas que falei acima já da para ter uma gridview mais "saudável".


    Abraço
    • Sugerido como Resposta Thales Lopes segunda-feira, 8 de março de 2010 12:20
    • Marcado como Resposta Harley Araujo terça-feira, 9 de março de 2010 13:18
    domingo, 7 de março de 2010 16:09
  • Só para complementar o que o mariano já disse, caso vc use esse seu modelo mesmo carregue um reader na sua consulta que é bem mais leve.
    • Sugerido como Resposta Thales Lopes segunda-feira, 8 de março de 2010 12:20
    • Marcado como Resposta Harley Araujo terça-feira, 9 de março de 2010 13:18
    segunda-feira, 8 de março de 2010 12:18
    Moderador

Todas as Respostas

  • Bom geralmente é feito desse jeito que você postou. Mas pode ser feito umas melhorias de código e performance.

    1) Popular a gridview com um objeto do tipo List<> pois ocupa bem menos espaço em memória que um DataSet.
    2) Utilizar um bloco de try catch dentro do método Grid() para manipular os erros caso aconteçam.
    3) O objetivo é reduzir o viewstate pois este influencia na performance. Então evite guardar objetos no viewstate e desabilite o viewstate quando não estiver utilizando.
    4)Existem outras melhorias mais avançadas como Cache e customização de gridview para não renderizar um table com o ListView, mais com essas que falei acima já da para ter uma gridview mais "saudável".


    Abraço
    • Sugerido como Resposta Thales Lopes segunda-feira, 8 de março de 2010 12:20
    • Marcado como Resposta Harley Araujo terça-feira, 9 de março de 2010 13:18
    domingo, 7 de março de 2010 16:09
  • Só para complementar o que o mariano já disse, caso vc use esse seu modelo mesmo carregue um reader na sua consulta que é bem mais leve.
    • Sugerido como Resposta Thales Lopes segunda-feira, 8 de março de 2010 12:20
    • Marcado como Resposta Harley Araujo terça-feira, 9 de março de 2010 13:18
    segunda-feira, 8 de março de 2010 12:18
    Moderador