Refresh Repeater com TableAdapter ASP

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();
            }
        }
 
Back
Topo