1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Refresh Repeater com TableAdapter ASP

Discussão em 'Web Development' iniciada por trashCanMan, 2 de Fevereiro de 2009. (Respostas: 2; Visualizações: 454)

  1. trashCanMan

    trashCanMan Power Member

    Boas pessoal,
    Tenho à algum tempo um grave problema em mãos, que se resume ao seguinte:
    tenho um Repeater que é populado através de um TableAdapter, até aqui tudo bem, o problema é que quando faço Update a esse adapter, para inserir um novo registo (ou remover) e tento fazer refresh ao Repeater, estas actualizações não têem logo efeito (só depois de fazer postback). Já notei que depois de fazer o Update, o registo está mesmo incluido no TableAdapter e também na propria BD, contudo ao fazer o bind ao Repeater (mesmo com o numero certo de registos), esta nao é actualizada!!! De notar que isto não acontece sempre!!
    Alguem tem ideia do que se passa?

    Obrigado

    Metodo que faz o bind ao Repeater
    Código:
    /// <summary>
            /// Configura a GridView que imprime as paginas relacionadas com determinada categoria
            /// </summary>
            private bool PopulateRptParesPaginaCategoria()
            {
                bool greatSuccess = false;
                TMapaDoSite_ComCategoriaTableAdapter adpMapaDoSiteComCategoria =
                        new TMapaDoSite_ComCategoriaTableAdapter();
                try
                {
                    ESAF_DS_MapaDoSite.TMapaDoSite_ComCategoriaDataTable dtMapaDoSiteComCategoria =
                        adpMapaDoSiteComCategoria.Get_TMapaDoSite_ComCategoria_ByCodCat(this.ddlTodasAsCategorias.SelectedValue);
                    //-->
                    dtMapaDoSiteComCategoria.AcceptChanges();
                    //-->
                    
                    this.rptParesPaginaCategoria.DataSource = dtMapaDoSiteComCategoria;
                    this.rptParesPaginaCategoria.DataBind();
                    
                    if (dtMapaDoSiteComCategoria.Rows.Count > 0)
                    {
                        
                        this.btnEliminarParCategoriaPagina.Enabled = true;
                    }
                    else
                    {
                        lblErro.Text = "Não existem páginas associadas à categoria escolhida";
                        this.btnEliminarParCategoriaPagina.Enabled = false;
                    }
                    greatSuccess = true;
                }
                catch (Exception ex)
                {
                    LogException(ex);
                    this.lblErro.Text = "Ocorreu um erro ao listar as páginas da categoria seleccionada<br/>Por favor, contacte o Administrador";
                    greatSuccess = false;
                    this.btnEliminarParCategoriaPagina.Enabled = false;
                }
                finally
                {
                    adpMapaDoSiteComCategoria.Dispose();
                }
                return greatSuccess;
            }
    
    Metodo que actualiza a BD
    Código:
    /// <summary>
            /// Fires when the button is clicked
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void BtnAssociarParCategoriaPagina_Click(object sender, EventArgs e)
            {
                TMapaDoSiteTableAdapter adpMapaDoSite = new TMapaDoSiteTableAdapter();
                try
                {
                    ESAF_DS_MapaDoSite.TMapaDoSiteDataTable dtMapaDoSite_ByCodCat = adpMapaDoSite.Get_TMapaDoSite_ByCodCat(this.ddlTodasAsCategorias.SelectedValue);
                    ESAF_DS_MapaDoSite.TMapaDoSiteDataTable dtMapaDoSite = adpMapaDoSite.Get_TMapaDoSite();
    
                    if (this.lbxTodasAsPaginasFO.SelectedItem != null && ddlTodasAsCategorias.SelectedItem != null)
                    {
                        ESAF_DS_MapaDoSite.TMapaDoSiteRow drMapaDoSite = dtMapaDoSite.NewTMapaDoSiteRow();
                        drMapaDoSite.CodCat = this.ddlTodasAsCategorias.SelectedValue;
                        drMapaDoSite.TabId = Int32.Parse(lbxTodasAsPaginasFO.SelectedValue);
                        drMapaDoSite.Titulo = lbxTodasAsPaginasFO.SelectedItem.Text;
                        drMapaDoSite.Ordem = dtMapaDoSite_ByCodCat.Rows.Count > 0 ? ((int)dtMapaDoSite_ByCodCat.Compute("MAX(Ordem)", string.Empty)) + 1 : 1;
                        drMapaDoSite.DTCRIA = DateTime.Now;
                        drMapaDoSite.USERCRIA = UserInfo.Username;
    
                        //dtMapaDoSite.AddTMapaDoSiteRow(drMapaDoSite);
                        dtMapaDoSite.Rows.Add(drMapaDoSite);
                        adpMapaDoSite.Update(dtMapaDoSite);
                        dtMapaDoSite.AcceptChanges();
    
                        this.PopulateLbxTodasAsPaginasFO();
                        this.PopulateRptParesPaginaCategoria();
                        this.lblErro.Text = "";
                    }
                    else
                    {
                        this.lblErro.Text = this.lbxTodasAsPaginasFO.SelectedItem == null ? "Favor escolher uma página para associar à categoria seleccionada" : "Favor escolher uma categoria para associar à página seleccionada";
                    }
                    
                }
                catch (Exception ex)
                {
                    LogException(ex);
                    this.lblErro.Text = "Ocorreu um erro ao associar a página escolhida à categoria pretendida<br/>Por favor, contacte o Administrador";
                }
                finally
                {
                    adpMapaDoSite.Dispose();
                }
            }
    
     
  2. SoundSurfer

    SoundSurfer Power Member

    Experimenta fazer Bind ao repeater outra vez depois do update.
     
  3. trashCanMan

    trashCanMan Power Member

    já tava a fazer... depois de fazer o Update, o metodo PopulateRptParesPaginaCategoria(); é chamado, onde é feito o Bind() ao repeater
     

Partilhar esta Página