데이터 소스가 서버 측 데이터 페이징을 지원하지 않습니다.
내 화면에 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
'Programing' 카테고리의 다른 글
메시지 앱을 열지 않고 프로그래밍 방식으로 SMS 보내기 (0) | 2021.01.06 |
---|---|
Angular 2 구성 요소는 NgModule의 일부가 아닙니다. (0) | 2021.01.06 |
사무실없이 C #에서 Excel 파일 만들기 (0) | 2021.01.06 |
루비 : 문자열을 날짜로 변환 (0) | 2021.01.06 |
이미지로드 감지 (0) | 2021.01.06 |