c# - Источник данных не поддерживает подкачку данных на стороне сервера




asp.net linq sorting gridview (7)

Вы также можете использовать общий List<T> . См. Фрагмент кода примера:

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

Вы также можете использовать DataSet / DataTable вместо DataReader.

У меня есть GridView на моем экране, и мне нужно его, чтобы разрешить пейджинг.

Разметка:

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

Код-за:

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

Запрос LINQ:

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

Однако я получаю эту ошибку:

Источник данных не поддерживает разбиение на страницы на стороне сервера.

Что я делаю не так?


Простой ToList() для вашего результата var должен работать.

Изменить : поскольку BornToCode объясняется в комментариях ниже моего ответа, причина ошибки заключается в том, что источник данных должен реализовывать ICollection. IEnumerable не делает, когда вы делаете ToList() он преобразует его в список, который реализует ICollection.


.ToList() в конце DataSource, я назначаю работу для меня, как .ToList() ниже:

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

В ObjectDataSource просто добавьте enablePaging="true" который будет работать.


Запрос 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();
}

Я изменил свой код на это:

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

Вы говорите, что считаете, что .NET лжет вам, и конкретный пример, который вы даете, состоит в том, что заголовок Content-Length отсутствует в ответе HTTP.

Но заголовок Content-Length не требуется из ответа HTTP. На самом деле, если тело ответа находится в любой динамике, и если его длина неизвестна заранее, то весьма вероятно, что заголовок Content-Length будет опущен!





c# asp.net linq sorting gridview