Pregunta

Tengo un gridview que tiene su propiedad DataSourceID fijar a un objeto ObjectDataSource personalizado. Cuando AllowPaging se establece en True, el GridView desaparece después de una devolución de datos. Si fijo AllowPaging en False está bien. ¿Puede alguien aclararme esto un poco? :)

Editar La otra cosa que estoy confundido acerca es que pensé que si establece el DataSourceID que la red podría obtener datos de la fuente de datos cada vez que lo necesitaba. Si la red está desapareciendo porque no es la celebración de los datos, ¿por qué no es el gridview obtener los datos que necesita de la fuente de datos?

¿Fue útil?

Solución

Es posible que después de producirse la devolución de datos del origen de datos no se mantiene o se vuelve a llenar y no hay elementos para rellenar la cuadrícula. Está manejando correctamente el estado del objeto de fuente de datos (reencuadernación / mantenimiento de la fuente viva) cuando está habilitada la paginación?

Esto puede sonar como una respuesta vaga, pero sin un ejemplo de cómo la fuente está recibiendo los datos que es un poco difícil de diagnosticar por qué los elementos se habrían ido.

Editar:
El método que yo estaba pensando era de devolución de llamada de búsqueda / clasificación. Yo sin embargo encontrar algo de información ont él SAO y de paginación .. asegurarse de que ha establecido lo siguiente:

  1. GridView: AllowPaging y por supuesto es necesario establecer PageSize.
  2. ObjectDataSource: EnablePaging, también es necesario configurar el:
    • MaximumRowsParameterName = "maxRows"
    • StartRowIndexParameterName = "startRowIndex"
    • SelectCountMethod = "RecordCount"

Creo que sólo es necesario para establecer los elementos 3 de sub artículo 2 si desea controlar manualmente el tamaño de paginación, etc.

A continuación, puede leer más arriba en este aquí .

Otros consejos

Para responder a más de la respuesta de @ adam0101, lo que Creo que quiere decir con "... Resulta que mi fuente de datos personalizada regresaba cero para el número de registros ." , es que puede que tenga que " vuelva a fijar " la fuente de datos para el gridview. ASP.net sabe automáticamente que estés retriving record 'n', donde 'n' es el próximo primera fila de la página siguiente. Esta solución es más para los casos en los que no desea permitir asp.net a manejar automáticamente los datos en su gridview, tal vez debido a querer cargar datos después de otro evento (un botón de carga de datos, por ejemplo) y no cuando la página se ha cargado por primera vez. Pero como Adán se menciona a continuación la verdadera razón era que "... había creado una subclase fuente de datos que heredó ObjectDataSource, pero se llevó a cabo de forma incorrecta.". Lo siento por mi suposición de que hay Adán. Gracias

Sin embargo, el resto de mi solución creo que va a trabajar para aquellos atrapados en el uso de fuentes de datos derivados de forma manual.

es decir,

Establezca su GridView a lo anterior, y la nota - sin una propiedad DataSource! Aquí está mi ejemplo:

     <asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server" 
            ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">

A continuación crea un método privado o rutina que se puede recurrir cuando quiera que tenga que forzar el gridview a una nueva página.

private void BindGridViewServer(GridView gv1)
{
    gv1.DataSource = sdsStudents;   //re-attach the datasource
    gv1.DataBind();                 //get a page of data AllowPaging must be true
}

A continuación, cree el método OnPageIndexChanging:

protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView myGV = (GridView)sender;
    myGV.PageIndex = e.NewPageIndex;
    BindGridViewServer(myGV);
}

En aras de completar esta respuesta, aquí es mi código donde me carga los datos cuando quiero - no cuando un PostPack es despedido, que es el valor por defecto ...

    protected void btnSEARCH(object sender, EventArgs e)
        {
//some code
                    //bind the gridview to the datasource here and then bind!
                    gvStudents.DataSource = sdsStudents;
                    gvStudents.DataBind();
//more code etc
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top