listview, datapager, objectdatasource no funciona en el panel de actualización

Cuando cambio la página en el buscapersonas, provoca una devolución de datos completa, incluso el buscapersonas funciona de manera muy anormal, no sé cuál es el motivo. por abnormaaly me refiero a que a veces los datos se muestran a veces no,
Lo siguiente es mi código en C#

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

    protected void StudentListView_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
    {
        BindListView();
    }
    private void BindListView()
    {
        StudentListView.DataSource = StudentDataSource;
        StudentListView.DataBind();
    }

    protected void StudentDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        e.Arguments.MaximumRows = StudentListDataPager.MaximumRows;
        e.Arguments.StartRowIndex = StudentListDataPager.StartRowIndex;
    }

Lo siguiente es mi marcado

    <asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>        <
    <asp:DropDownList runat="server" ID="BatchDropDownList" AutoPostBack="True">
        <asp:ListItem Text="Batch 1" Value="1" Selected="True" />
        <asp:ListItem Text="Batch 2" Value="2" />
    </asp:DropDownList>

    <asp:ListView ID="StudentListView" runat="server"       
        ItemPlaceholderID="ListViewContent" 
            EnableViewState="false" 
            onpagepropertieschanging="StudentListView_PagePropertiesChanging"> 
        <LayoutTemplate> 
            <table style="width:100%">
                <thead>
                    <tr>
                        <th class="align-left"><strong>Name</strong></th>
                        <th class="align-left"><strong>MobNo</strong></th>
                    </tr>
                </thead>
                <tbody runat="server" id="ListViewContent"> 
                </tbody>
                <tfoot>
                    <tr>
                        <td colspan="3">

                        </td>
                    </tr>
                </tfoot>
            </table>

        </LayoutTemplate>  
        <ItemTemplate>  

            <tr>
                <td style="width:70%;"><%# Eval("FirstName") %>&nbsp<%# Eval("LastName") %></td>
                <td style="width:30%;"><%# Eval("MobNo") %></td>                    
            </tr>

        </ItemTemplate>             
    </asp:ListView>
    <asp:DataPager ID="StudentListDataPager" runat="server" PageSize="5" PagedControlID="StudentListView">
        <Fields>
            <asp:NumericPagerField />
        </Fields>
    </asp:DataPager>


    <asp:ObjectDataSource ID="StudentDataSource" runat="server" 
        SelectMethod="GetStudentListBatchWise" SelectCountMethod="StudentCount" 
            TypeName="SCERPCommonUtil.Student" EnablePaging="True" 
            onselecting="StudentDataSource_Selecting">
        <SelectParameters>
            <asp:ControlParameter Name="batchId" ControlID="BatchDropDownList" PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:ObjectDataSource>
    </ContentTemplate>
</asp:UpdatePanel>

Por favor, dime si estoy cometiendo algún error.

PD: No me señale ninguna pregunta de stackoverflow, ya que las he leído todas y ninguna es específica para mis requisitos.

El problema más importante al que me enfrento es que datapager está dando una devolución de datos completa, incluso si se pone datapager dentro updatepanel sucede lo mismo

preguntado el 31 de julio de 12 a las 10:07

Estimado, ha especificado el modo de actualización en condicional. ¿Ha mencionado el activador de devolución de datos en su panel de actualización? -

bien - con StudentListDataPager.SetPageProperties(e.StartRowIndex, e.MaximumRows, false); in StudentListView_PagePropertiesChanging() evento, el buscapersonas ahora funciona bien, pero aún así el problema del panel de actualización permanece como demonio, lo que provoca una devolución de datos completa, y pierdo todas mis variables locales de JavaScript. -

2 Respuestas

Estimado, ha especificado el modo de actualización en condicional. Pero ha mencionado algún desencadenante en su panel de actualización. Agregue AsyncPostBackTrigger a su panel de actualización

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<ContentTemplate> 
<Triggers>
            <asp:AsyncPostBackTrigger ControlID="StudentListView" EventName="PagePropertiesChanging" />
</Triggers>
<ContentTemplate>
</asp:UpdatePanel>

Desde MSDN: If the UpdateMode property is set to Conditional, and one of the following conditions occurs:

  1. Llame al método Update del control UpdatePanel explícitamente.
  2. La devolución de datos es causada por un control que se define como un desencadenador mediante el uso de la propiedad Triggers del control UpdatePanel. En este escenario, el control activa explícitamente una actualización del contenido del panel. El control puede estar dentro o fuera del control UpdatePanel que define el disparador.
  3. La propiedad ChildrenAsTriggers se establece en true y un control secundario del control UpdatePanel provoca una devolución de datos. Un control secundario de un control UpdatePanel anidado no provoca una actualización en el control UpdatePanel externo a menos que se defina explícitamente como un desencadenador.

Respuesta actualizada: ¿Por qué no ha mencionado el atributo DataSourceID en su vista de lista?

 <asp:ListView ID="StudentListView" runat="server"  DataSourceID  ="StudentDataSource"

y está vinculando su vista de lista en su código detrás como

private void BindListView()
{
    StudentListView.DataSource = StudentDataSource; //also it should be DataSourceID 
    StudentListView.DataBind();
}

está utilizando la fuente de datos del objeto y en su código lo está vinculando como una fuente de datos que es incorrecta. Vincúlelo como una ID de fuente de datos o simplemente mencione el atributo datasourceID de listview, entonces no tiene que vincularlo en su código detrás.

Respondido 31 Jul 12, 11:07

PagePropertiesChanging El evento está asociado con ListView y no con DataPager, también eliminé UpdateMode y lo intenté, pero aún no funciona. j4m4l

Lo siento, le di una ID incorrecta para activar. Su código funciona normal sin panel de actualización ???? Revisalo - Waqar Janjuá

lo siento, pero lo que sugieres no funciona, todavía está dando una devolución de datos completa. - j4m4l

por supuesto, funcionará normalmente sin el panel de actualización, pero quiero usar el panel de actualización para la funcionalidad ajax. - j4m4l

ambos enfoques son correctos: configurar DataSourceId en el marcado o configurar DataSource en el código subyacente, pero datapager está causando una devolución de datos completa, es por eso que probé el enfoque del código subyacente (como se lee en algún artículo) - j4m4l

Me lo imaginé, en caso de que alguien venga a buscar.

estaba usando <form runat="server">...<form> etiqueta, dentro de la cual estaba presente toda esta vista de lista, código de buscapersonas. Cuando asigné único id atributo a la etiqueta de formulario, entonces todo comenzó a funcionar correctamente.
Aunque no entiendo la razón de tal comportamiento.

Respondido 28 ago 12, 22:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.