webentwicklung-frage-antwort-db.com.de

Die Datenquelle unterstützt kein serverseitiges Datenpaging

Ich habe eine GridView auf meinem Bildschirm und brauche sie, um das Paging zu ermöglichen.

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

LINQ-Abfrage:

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

Ich erhalte jedoch diesen Fehler:

Die Datenquelle unterstützt kein serverseitiges Datenpaging. 

Was mache ich falsch?

54
ClareBear

Ein einfaches ToList() für Ihre Ergebnisvariable sollte funktionieren.

Edit: Da BornToCode in den Kommentaren unter meiner Antwort erläutert wird, liegt der Grund für den Fehler darin, dass die Datenquelle ICollection implementiert. IEnumerable nicht, wenn Sie ToList() ausführen, wird es in eine Liste konvertiert, die ICollection implementiert.

125
almog.ori

Sie können auch generisch List<T> verwenden. Siehe das Beispielcode-Snippet:

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

Sie können anstelle von DataReader auch DataSet/DataTable verwenden.

3
renjucool

.ToList() am Ende der DataSource ordne ich wie folgt für mich gearbeitet zu:

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

Ich habe meinen Code folgendermaßen geändert:

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

Versuchen Sie diesen Artikel https://www.aspsnippets.com/Articles/ASPNet-GridView-The-data-source-does-not-support-server-side-data-paging.aspx

versuchen Sie zusammenfassend, diese Zeilen zu verwenden

private void BindGrid()
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT CustomerId, ContactName, Country FROM Customers"))
        {
            cmd.Connection = con;
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                GridView1.DataSource = sdr;
                GridView1.DataBind();
            }
            con.Close();
        }
    }
}

protected void OnPaging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    this.BindGrid();
}

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowPaging="true"
OnPageIndexChanging="OnPaging">
<Columns>
    <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" />
    <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
    <asp:BoundField DataField="Country" HeaderText="Country" />
</Columns>
0
Aljohn Yamaro

In ObjectDataSource fügen Sie einfach enablePaging="true" hinzu, der funktionieren wird.

0
Vporecha

Wenn Sie SqldataReader verwenden, wird Paging nicht unterstützt.

Die Lösung für diesen Fehler besteht in der Verwendung von DataSources wie generischen Listensammlungen, DataTables, DataSets usw., um die GridView zu binden.

0
Akhil Singh

LINQ-Abfrage:

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