none
Erro ao atualizar o gridview pela segunda vez (Entity Framework) RRS feed

  • Pergunta

  • Boa noite amigos

    Estou com enfrentando um problema que na teoria é simples porem na pratica eu estou sofrendo um pouco rs.

    tenho um método para alimentar um grid bem simples

       protected void Page_Load(object sender, EventArgs e)
            {
                if(! Page.IsPostBack)
                {
                    Pesquisar();
                }
            }

            public void Pesquisar()
            {
                try
                {
                    Session["Dados"] = FornecedorBLL.List();

                    //GridView1.PageSize = 2;
                    GridView1.DataSource = FornecedorBLL.List();
                    GridView1.DataBind();

                }
                catch (Exception ex)
                {
                    lbl_Erro.Visible = true;
                    lbl_Erro.Text = "Erro ao processar os fornecedores: " + ex.Message;
                }
            }

    Meu método List()

      public static IQueryable<FORNECEDOR> List()
            {
                return db.FORNECEDOR.AsQueryable<FORNECEDOR>();
            }

    Eu entro na pagina belezinha faço o cadastro normalmente ele chega cadastrar no banco porem ele da um erro quando ele passa pelo databind() pela segunda vez

    Meu método cadastrar.

            protected void btn_Cadastrar_Click(object sender, EventArgs e)
            {
                try
                {
                    Forn = new FORNECEDOR();
                    Forn.RAZAO = txt_Razao.Text;
                    Forn.CNPJ = txt_Cnpj.Text;
                    Forn.CONTATO = txt_Contato.Text;
                    Forn.EMAIL = txt_Email.Text;
                    Forn.RAMO = txt_Ramo.Text;
                    Forn.TEL = txt_Tel.Text;
                    Forn.TEL1 = txt_Tel1.Text;
                    Forn.TEL2 = txt_Tel2.Text;
                    Forn.OBS = txt_Obs.Text;
                    
                    FornecedorBLL fornece = new FornecedorBLL();

                    fornece.SalvarFornec(Forn);

                    Pesquisar();
                }
                catch (Exception ex)
                {
                    lbl_Erro.Visible = true;
                    lbl_Erro.Text = "Erro ao cadastrar o fornecedor: " + ex.Message;
                }

    É bem na hora que ele chama o Pesquisar() depois de ter cadastrado no banco para atualizar a tela.

    Erro que ele retorna na tela:

    Both DataSource and DataSourceID are defined on 'GridView1'.  Remove one definition.

    Para eu poder continuar trabalhando eu tenho que fechar o visual studio e abrir novamente

    Ja fui na setinha do grid e no campo choose data source não tem nada.

    Em algum momento eu tenho que destruir alguma coisa que eu não estou sabendo.

    Vlw Pessoal.

    sexta-feira, 15 de fevereiro de 2013 03:42

Respostas

Todas as Respostas

  • Boa noite amigos

    Estou com enfrentando um problema que na teoria é simples porem na pratica eu estou sofrendo um pouco rs.

    tenho um método para alimentar um grid bem simples

       protected void Page_Load(object sender, EventArgs e)
            {
                if(! Page.IsPostBack)
                {
                    Pesquisar();
                }
            }

            public void Pesquisar()
            {
                try
                {
                    Session["Dados"] = FornecedorBLL.List();

                    //GridView1.PageSize = 2;
                    GridView1.DataSource = FornecedorBLL.List();
                    GridView1.DataBind();

                }
                catch (Exception ex)
                {
                    lbl_Erro.Visible = true;
                    lbl_Erro.Text = "Erro ao processar os fornecedores: " + ex.Message;
                }
            }

    Meu método List()

      public static IQueryable<FORNECEDOR> List()
            {
                return db.FORNECEDOR.AsQueryable<FORNECEDOR>();
            }

    Eu entro na pagina belezinha faço o cadastro normalmente ele chega cadastrar no banco porem ele da um erro quando ele passa pelo databind() pela segunda vez

    Meu método cadastrar.

            protected void btn_Cadastrar_Click(object sender, EventArgs e)
            {
                try
                {
                    Forn = new FORNECEDOR();
                    Forn.RAZAO = txt_Razao.Text;
                    Forn.CNPJ = txt_Cnpj.Text;
                    Forn.CONTATO = txt_Contato.Text;
                    Forn.EMAIL = txt_Email.Text;
                    Forn.RAMO = txt_Ramo.Text;
                    Forn.TEL = txt_Tel.Text;
                    Forn.TEL1 = txt_Tel1.Text;
                    Forn.TEL2 = txt_Tel2.Text;
                    Forn.OBS = txt_Obs.Text;
                    
                    FornecedorBLL fornece = new FornecedorBLL();

                    fornece.SalvarFornec(Forn);

                    Pesquisar();
                }
                catch (Exception ex)
                {
                    lbl_Erro.Visible = true;
                    lbl_Erro.Text = "Erro ao cadastrar o fornecedor: " + ex.Message;
                }

    É bem na hora que ele chama o Pesquisar() depois de ter cadastrado no banco para atualizar a tela.

    Erro que ele retorna na tela:

    Both DataSource and DataSourceID are defined on 'GridView1'.  Remove one definition.

    Para eu poder continuar trabalhando eu tenho que fechar o visual studio e abrir novamente

    Ja fui na setinha do grid e no campo choose data source não tem nada.

    Em algum momento eu tenho que destruir alguma coisa que eu não estou sabendo.

    Vlw Pessoal.

    Esse processo de pegar uma coleção de registros e exibir dentro de algum controle que suporta a ligação de dados se chama Vinculação de Dados...

    Existem 2 tipos de Vinculação de Dados

    • Declarativa -> você carrega o controle a partir de algum controle assistente asp.net e utiliza a propriedade DataSourceID
    • Simples -> via linha de código e utiliza a propriedade DataSource

    Abre o ASPX encontra a declaração do GridView e remove a propriedade DataSourceID...

    Esse erro ele está falando que você está tentando carregar das 2 formas (Via Assistente e Via Linha de Código)


    Leonardo Lourenço Silva

    sexta-feira, 15 de fevereiro de 2013 03:53
  • Boa noite Leandro, ou será bom dia já..rs

    Então o erro quer dizer isso mesmo, mas eu nao uso nenhum wizard para apontar pro grid(Declarativa) eu faço somente via codigo

    O que acontece é que eu ja carrego ele pelo Pesquisar quando abro a pagina quando eu cadastro um registro eu chamo novamente o Pesquisar ai que ele diz que ja esta carregado entendeu...

    eu estou fazendo da forma Simples como você disse via codigo.

    como eu disse acima no Chosse data source não tem nada apontado para ele dizer que ja tem um outro entendeu, eu acho que tem que destruir alguma coisa da memória para ele deixar eu carregar o mesmo grid pela segunda vez, entendeu?

    Vlw Pela ajuda

    sexta-feira, 15 de fevereiro de 2013 04:09
  • Boa noite Leandro, ou será bom dia já..rs

    Então o erro quer dizer isso mesmo, mas eu nao uso nenhum wizard para apontar pro grid(Declarativa) eu faço somente via codigo

    O que acontece é que eu ja carrego ele pelo Pesquisar quando abro a pagina quando eu cadastro um registro eu chamo novamente o Pesquisar ai que ele diz que ja esta carregado entendeu...

    eu estou fazendo da forma Simples como você disse via codigo.

    como eu disse acima no Chosse data source não tem nada apontado para ele dizer que ja tem um outro entendeu, eu acho que tem que destruir alguma coisa da memória para ele deixar eu carregar o mesmo grid pela segunda vez, entendeu?

    Vlw Pela ajuda

    Mas você olhou a declaração no ASPX ???

    Se estiver DataSourceID="" ele já reclamaria...

    Da um FIND ae nessa página tanto no ASPX quanto no CodeBehind pra procurar a palavra DataSourceID


    Leonardo Lourenço Silva

    sexta-feira, 15 de fevereiro de 2013 04:16
  • Faz um teste ae...

    Tenta substituir o código atual do List, pelo código abaixo.

      public static IList<FORNECEDOR> List()
            {
                return db.FORNECEDOR.ToList();
            }


    Leonardo Lourenço Silva

    sexta-feira, 15 de fevereiro de 2013 04:20
  • Mudei o codigo como vc informou, e agora ele da esse erro

    Erro ao processar os fornecedores: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

    Porem depois do erro ele some com o grid mesmo que eu saia da pagina e entre novamente ele na carrega o grid mais.

    E eu fiz uma busca como vc pediu e ele não existe no projeto

    Procurei a palavar DataSourceID

    sexta-feira, 15 de fevereiro de 2013 04:26
  • Não sei se ajuda, mas ele cadastrou com sucesso o registro na hora de atualizar o grid ele estoura o erro
    sexta-feira, 15 de fevereiro de 2013 04:28
  • Veja

    http://stackoverflow.com/questions/11893352/the-objectcontext-instance-has-been-disposed-winforms-entity-framework


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    sexta-feira, 15 de fevereiro de 2013 10:37
    Moderador
  • Não sei se ajuda, mas ele cadastrou com sucesso o registro na hora de atualizar o grid ele estoura o erro
    qual erro?

    Twitter: @MayogaX
    Blog: Dev Blog

    sexta-feira, 15 de fevereiro de 2013 11:11
  • primeiramente era essa

    Both DataSource and DataSourceID are defined on 'GridView1'.  Remove one definition.

    depois que eu alterei o codigo como nosso amigo Leonardo sugeriu apresenta esse erro

    The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

    sexta-feira, 15 de fevereiro de 2013 12:28
  • você precisa setar o datasource...está fazendo isso?

    Twitter: @MayogaX
    Blog: Dev Blog

    sexta-feira, 15 de fevereiro de 2013 17:59
  • você precisa setar o datasource...está fazendo isso?

    Twitter: @MayogaX
    Blog: Dev Blog

    Bom dia Priscila, então como eu coloquei acima o problema está quando ele passa pela segunda vez no DataBind()

    Eu acredito que teremos que destruir o componente ou a conexão dele e recriar novamente...o codigo está no primeiro post

    quarta-feira, 20 de fevereiro de 2013 14:47
  • Desculpa a demora. Então, que tal você dar um null no data sorce e repassar antes do segundo post?

    Microsoft Communit Contributor
    Twitter: @MayogaX
    Blog: Dev Blog

    terça-feira, 26 de fevereiro de 2013 22:24
  • deixa somente no datasourceid

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    segunda-feira, 4 de março de 2013 12:11
    Moderador