none
Iniciando o uso do ASP.NET, me ajudem nos conceitos..... RRS feed

  • Pergunta

  • Pessoal é o seguinte, estou começando a trabalhar com WEB, ja programo a bom tempo desktop e para web PHP, no entanto estou inciando minha empreitada no ASP.Net

    Estou conseguindo trabalhar normalmente, mas vejo pouco rendimento, estive pesquisando e cada um faz de um jeito, mas vamos lá...

    Minhas duvidas são:

    Quando tenho um datagrid paginado, ele foi carregado baseado em uma lista de objetos, esta lista deve ficar armazenado em sessao e ser carregada a cada "load" da página, ou existe alguma outra técnica?

    Da mesma maneira, quando tenho um dropdown carregado com listas de objetos, ao final da postagem, quero recuperar o objeto, baseado no valor selecionado... nesse caso o que seria mai interessante, consultar o banco novamente, já que estou de posse do Id do registro ou armazenar a lista em algum lugar, tipo sessao ou viewstate?

    sexta-feira, 1 de junho de 2012 02:51

Todas as Respostas

  • Bom dia Ives!

    1) Depende do que você quer fazer! 

    Se esta lista de objetos vier do banco de dados(por exemplo), basta você setar o "DataSource" do dataGrid sendo esta lista no page load mesmo, e não precisará gravar na sessão ou coisa do tipo.

    A sessão serve, a grosso modo, para armazenar valores no servidor que podem ser usados a qualquer momento e em qualquer página enquanto o usuário estiver online.

    Dê uma olhada neste exemplo: http://www.macoratti.net/12/04/aspn_gv1.htm

    2) Não entendi bem a sua pergunta, mas vou tentar pelo que entendi:

    Vale a pena vc pegar o objeto selecionado e se precisar fazer alguma pesquisa pelo Id, você já estará com ele "na mão".

    Avalie bem o uso de Session e ViewState para não sobrecarregar o servidor e/ou sua página!

    Dê uma olhadinha nisto: http://www.macoratti.net/08/09/c_pddl1.htm

    sexta-feira, 1 de junho de 2012 11:04
  • Ives, acredito que o ideal seria sempre recarregar tudo.. imagine que o seu usuário ficou com uma página aberta 30 minutos e só depois clicou para paginar.. nestes 30 minutos vários registros novos foram adicionados correto? Se você guardar em sessão, esses dados novos não iriam aparecer na tela.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sexta-feira, 1 de junho de 2012 11:21
  • Bom dia a todos.

    No primeiro caso eu jogaria o objeto na session e sempre que for disparado o evento de paginação eu converto a Session para o objeto e dou um data source novamente. Veja abaixo.

     protected void GridViewMaterias_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                try
                {
                    GridViewMaterias.PageIndex = e.NewPageIndex;               
                    GridViewMaterias.DataSource = (DataTable)Session["Tab_Resultado"];
                    GridViewMaterias.DataBind();
                }
                catch
                {
                    throw;
                }            
            }

    Nunca tive problemas com este uso e o meu sistema tem vários acessos simultaneos.

    Quanto ao DropDownList acho que ai sim, você deve buscar no banco com ID, mesmo porque isso deve ser um filtro.

    Se eu estiver errado alguém me corrija por favor.

    sexta-feira, 1 de junho de 2012 12:27
  • Olá Ives!

    No primeiro caso, você não precisa necessariamente armazenar a lista em uma sessão, Pode criar um método e simplesmente chamá-lo no Page_Load da página. Por ex:

    //aqui você tem suas operações de preenchimento)
    GridView1.datasource = preencheGrid(); 
    
    //E aqui você atualiza os valores.
    GridView1.DataBind();
    

    Já no segundo caso, também usaria uma consulta ao banco criando um DataSet por exemplo e usando ele como DataSource do componente que você desejar.

    Abraço!

    sexta-feira, 1 de junho de 2012 18:08