2009-11-02 10 views
50

Tengo un GridView en mi pantalla y necesito que permita la paginación.La fuente de datos no es compatible con la paginación de datos del lado del servidor

de marcado:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" DataSourceID="ObjectDataSource1"> 
    <Columns> 
    <asp:BoundField DataField="appID" HeaderText="appID" SortExpression="appID" /> 
    </Columns> 
</asp:GridView> 

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    SelectMethod="GetBookingId" 
    TypeName="AppointmentRepository"> 
    <SelectParameters> 
    <asp:Parameter Name="maximumRows" Type="Int32" /> 
    <asp:Parameter Name="startRowIndex" Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

de código subyacente:

ObjectDataSource1.SelectParameters["maximumRows"].DefaultValue = "10"; 
ObjectDataSource1.SelectParameters["startRowIndex"].DefaultValue = "0"; 

consulta LINQ:

public IQueryable<tblAppointment> GetBookingId(int maximumRows, int startRowIndex) 
{ 
    var result = (FROM a IN dc.tblAppointments 
        SELECT a).Skip(startRowIndex).Take(maximumRows); 
} 

Sin embargo recibo este error:

The data source does not support server-side data paging.

¿Qué estoy haciendo mal?

Respuesta

121

Un simple ToList() en su resultado var debería funcionar.

Editar: Como BornToCode se explica en los comentarios a continuación mi respuesta, la razón del error es que la fuente de datos debe implementar ICollection. IEnumerable no lo hace, cuando lo hace ToList(), lo convierte en una lista que implementa ICollection.

3

También puede usar el genérico List<T>. Ver el fragmento de código de muestra:

public List<Company> GetContactList(int startindex) 
{ 

    string path = Server.MapPath("~/contacts.xml"); 
    XDocument xd = XDocument.Load(path); 
    IEnumerable<Company> results = (from items in xd.Elements("Company").Elements("Contact") 
        select new Company 
        { 
         Id = items.Element("ID").Value, 
         Photo = (string)items.Element("photo").Value, 
         Name = (string)items.Element("Name").Value, 
         BloodGroup = (string)items.Element("Bg").Value, 
         Dob = (string)items.Element("dob").Value, 
         Anniversery = (string)items.Element("avd").Value, 
         Mobile = (string)items.Element("cnum").Value, 
         designation = (string)items.Element("desig").Value, 
         Team = (string)items.Element("team").Value 
        }).Skip(startindex*10).Take(10); 
    return (List<Company>) results; 
} 

También puede utilizar conjunto de datos/DataTable en lugar de DataReader.

0

En ObjectDataSource acaba de agregar enablePaging="true" que funcionará.

1

he cambiado mi código para esto:

public List<string> ListofNewsTitle() 
{ 
    var query = from n in db.NewsEvents 
       orderby n.NewsDate descending 
       select n.NewsTitle; 
    return query.ToList();   
} 
1

.ToList() en el extremo de la fuente de datos, voy a asignar trabajó para mí, como a continuación:

gvCaseLabelsLeft.DataSource = caseLabelsList.OrderBy(c=>c.caseLabelNumber).ToList(); 
0

consulta LINQ:

ProductController.cs:

List<Product> products= productModel.GetProducts(start, offset); 

ProductModel.cs:

public List<Product> GetProducts(int start, int offset) 
{ 
    IEnumerable<Product> query = from m in db.Products 
           orderby m.Id descending 
           select m; 
    query = query.Skip(start).Take(offset); 
    return query.ToList(); 
} 
0

Si está utilizando SQLDataReader entonces no es apoyar paginación.

La solución a este error está haciendo uso de DataSources, como las colecciones de lista genérica, DataTables, DataSets, etc., para vincular GridView.

Marque mi respuesta si se resolvió el problema.

Cuestiones relacionadas