58 votes

La source de données ne prend pas en charge la pagination des données côté serveur.

J'ai un GridView sur mon écran et j'ai besoin qu'il permette la pagination.

Markup :

<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>

Code-behind :

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

Requête LINQ :

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

Cependant, je reçois cette erreur :

La source de données ne prend pas en charge la pagination des données côté serveur.

Qu'est-ce que je fais de mal ?

131voto

almog.ori Points 5145

Un simple ToList() sur votre var de résultat devrait fonctionner.

Modifier : Comme expliqué dans les commentaires sous ma réponse, la raison de l'erreur est que la source de données devrait implémenter ICollection. IEnumerable ne le fait pas, quand vous faites ToList() il la convertit en une liste qui implémente ICollection.

3voto

renjucool Points 218

Vous pouvez utiliser les génériques List<T> également. Voir l'exemple d'extrait de code :

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;
}

Vous pouvez également utiliser DataSet/DataTable au lieu de DataReader.

2voto

sakhya Points 1

.ToList() à la fin du DataSource, j'assigne a fonctionné pour moi comme ci-dessous :

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

1voto

J'ai modifié mon code comme suit :

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

0voto

Vporecha Points 29

Dans ObjectDataSource, il suffit d'ajouter enablePaging="true" qui fonctionnera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X