Programing

데이터 소스가 서버 측 데이터 페이징을 지원하지 않습니다.

lottogame 2021. 1. 6. 07:40
반응형

데이터 소스가 서버 측 데이터 페이징을 지원하지 않습니다.


내 화면에 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()결과 변수에 대한 간단한 것이 작동합니다.

편집 : 내 대답 아래의 주석에서 설명한 것처럼 오류의 원인은 데이터 소스가 ICollection을 구현해야하기 때문입니다. IEnumerable은 그렇지 않습니다 ToList(). 그러면 ICollection을 구현하는 목록으로 변환됩니다.


제네릭 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;
}

DataReader 대신 DataSet / DataTable을 사용할 수도 있습니다.


.ToList() DataSource가 끝나면 아래와 같이 작업을 할당하고 있습니다.

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

내 코드를 다음과 같이 변경했습니다.

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

In ObjectDataSource just add enablePaging="true" that will work.


LINQ query:

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

If You are Using SqldataReader then its not support Paging.

Solution to this error is making use of DataSources such as Generic List collections, DataTables, DataSets, etc. to bind the GridView.


Try this article https://www.aspsnippets.com/Articles/ASPNet-GridView-The-data-source-does-not-support-server-side-data-paging.aspx

in summary try to use these lines

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>

ReferenceURL : https://stackoverflow.com/questions/1661292/the-data-source-does-not-support-server-side-data-paging

반응형