none
AsyncPostBackTrigger GridView.Sorting não atualiza o documento RRS feed

  • Pergunta

  • Ola,

    O Sorting está funcionando ok estou usando um ordernar do tipo T, porem meu updatepanel não está mudando o documento.

    Fiz um teste antes de tentar aplicar isso no meu projeto segue pagina:

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
        CodeBehind="Default.aspx.cs" Inherits="TesteSortingUpdatePanel._Default" Async="true" %>

    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    </asp:Content>
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
        <asp:UpdatePanel ID="upl" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >
            <ContentTemplate>
                <asp:GridView runat="server" ID="gdv" ViewStateMode="Disabled" AllowSorting="true"
                    AutoGenerateColumns="false" onsorting="gdv_Sorting">
                    <Columns>
                        <asp:BoundField HeaderText="N" DataField="nome" SortExpression="nome" />
                        <asp:BoundField DataField="idade" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Button ID="btn" runat="server" OnClick="button_Click" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="gdv" />
            </Triggers>
        </asp:UpdatePanel>
    </asp:Content>

    Código:

    public class Ordenar<T> : IComparer<T>
        {
            private SortDirection sortDirection;
            private string sortExpression;

            public Ordenar(string sortExpression, SortDirection sortDirection)
            {
                this.sortExpression = sortExpression;
                this.sortDirection = sortDirection;
            }

            public SortDirection SortDirection
            {
                get { return this.sortDirection; }
                set { this.sortDirection = value; }
            }

            public int Compare(T x, T y)
            {
                PropertyInfo propertyInfo = typeof(T).GetProperty(sortExpression);
                IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
                IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);

                if (SortDirection == SortDirection.Ascending)
                {
                    return obj1.CompareTo(obj2);
                }
                else
                {
                    return obj2.CompareTo(obj1);
                }
            }
        }

        public partial class _Default : System.Web.UI.Page
        {

            public class Teste
            {
                public string nome { set; get; }
                public int idade { set; get; }

                public Teste(string nome, int idade)
                {
                    this.nome = nome;
                    this.idade = idade;
                }
            }

            List<Teste> teste = new List<Teste>();

            protected void Page_Load(object sender, EventArgs e)
            {


                teste.Add(new Teste("A1", 10));
                teste.Add(new Teste("A2", 20));
                teste.Add(new Teste("A3", 30));

                gdv.DataSource = teste;
                gdv.DataBind();

                gdv.RowCreated += (se, ev) =>
                {
                    if (ev.Row.RowType == DataControlRowType.DataRow)
                    {
                        Button btn = (Button)ev.Row.FindControl("btn");

                        //ScriptManager manager = (ScriptManager)Master.FindControl("ScriptManager1");

                        //manager.RegisterAsyncPostBackControl(btn);

                        //AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();

                        //trigger.ControlID = btn.ID;
                        //trigger.EventName = "Click";

                        //upl.Triggers.Add(trigger);


                    }
                };

            }

            SortDirection nextDir;

            protected SortDirection GetSortDirection(string Column)
            {

                if (HttpContext.Current.Session["sort"] != null && HttpContext.Current.Session["sort"].ToString() == Column)
                {
                    nextDir = SortDirection.Ascending;
                    HttpContext.Current.Session["sort"] = null;
                }
                else
                {
                    nextDir = SortDirection.Descending;
                    HttpContext.Current.Session["sort"] = Column;
                }
                return nextDir;

            }

            protected void button_Click(object sender, EventArgs e)
            {

            }

            protected void gdv_Sorting(object sender, GridViewSortEventArgs e)
            {
                teste.Sort(new Ordenar<Teste>(e.SortExpression, GetSortDirection(e.SortExpression)));

                gdv.DataSource = teste;
                gdv.DataBind();

                 upl.Update()
            }

        }
    }

    Segue Pagina após ter feito o sorting tanto ascending com descending:

       <div>
      <table cellspacing="0" rules="all" border="1" id="MainContent_gdv" style="border-collapse:collapse;">
       <tr>
        <th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$gdv&#39;,&#39;Sort$nome&#39;)">N</a></th><th scope="col">&nbsp;</th><th scope="col">&nbsp;</th>
       </tr><tr>
        <td>A1</td><td>10</td><td>
                                <input type="submit" name="ctl00$MainContent$gdv$ctl02$btn" value="" id="MainContent_gdv_btn_0" />
                            </td>
       </tr><tr>
        <td>A2</td><td>20</td><td>
                                <input type="submit" name="ctl00$MainContent$gdv$ctl03$btn" value="" id="MainContent_gdv_btn_1" />
                            </td>
       </tr><tr>
        <td>A3</td><td>30</td><td>
                                <input type="submit" name="ctl00$MainContent$gdv$ctl04$btn" value="" id="MainContent_gdv_btn_2" />
                            </td>
       </tr>
      </table>
     </div>

    O UpdatePanel não está dando update no documento.

    Por favor preciso de uma força!!!

    Brigado.




    • Editado Augusto PP domingo, 5 de agosto de 2012 15:30
    domingo, 5 de agosto de 2012 15:21

Respostas

  • Olá Augusto, tente o seguinte:

    No seu método abaixo você já faz o "upl.Update();".

            protected void gdv_Sorting(object sender, GridViewSortEventArgs e)
            {
                teste.Sort(new Ordenar<Teste>(e.SortExpression, GetSortDirection(e.SortExpression)));

                gdv.DataSource = teste;
                gdv.DataBind();

                 upl.Update()
            }

    Tente REMOVER a trigger do UpdatePanel, como você está forçando o UPDATE dele via C#, não precisa que uma trigger o faça, eu já tive esse problema e assim resolveu, você tamém pode tentar o contrário, como já tem o trigger, remova o upl.Update();

    Abraços, espero ter ajudado.


    Cássio V1RU5

    • Marcado como Resposta Harley Araujo sexta-feira, 24 de agosto de 2012 12:22
    quarta-feira, 8 de agosto de 2012 12:53