PDA

View Full Version : كارنكردن Sorting در Custom Paging/Sorting وقتي كه EnableCahce=True



Mostafa_Dindar
سه شنبه 08 دی 1388, 14:46 عصر
سلام .
يك GridView دارم كه از يك StoredProcedure كه Custom Paging/Sorting رو Support ميكنه براي پر كردن استفاده ميكنه .
همه چيز مرتب كار ميكنه . ولي مشكل وقتي پيش مياد كه من EnableCaching رو در ObjectDatasource مقدار True ميدم .
در اين حالت Paging هم درست كار ميكنه (يعني Caching اون هم درست هست )ولي وقتي كه ميخوام Sort كنم خطاي زير رو ميده (درحالي كه اگه EnableCahing مقدار False داشت اين مشكل پيش نميومد ):

The data source 'ObjectDataSource2' does not support sorting with IEnumerable data. Automatic sorting is only supported with DataView, DataTable, and DataSet.

mehdi.mousavi
پنج شنبه 10 دی 1388, 11:40 صبح
سلام .

The data source 'ObjectDataSource2' does not support sorting with IEnumerable data. Automatic sorting is only supported with DataView, DataTable, and DataSet.

سلام.
لطفا به این پست رجوع کنید. (http://lazyloading.blogspot.com/2008/07/sorting-grid-with-objectdatasource.html)

موفق باشید.

Mostafa_Dindar
پنج شنبه 10 دی 1388, 13:53 عصر
سلام .
ممنون از راهنماييتون .
پستي كه شما معرفي كردين Sorting رو در Bll پياده سازي كرده . ولي من Sorting و Paging رو هر دو در StoredProcedure پياده سازي كردم .شبيه مقاله Custom sorting Paged Result (http://aspnet.4guysfromrolla.com/articles/032206-1.aspx) اجازه بدين بيشتر توضيح بدم .
من در Bll متدي دارم كه startRowIndex, maximumRow, sortExpression و كليد خارجي رو به عنوان پارامتر ميگيره و به تعداد مورد نياز بر اساس sortExpression برميگردونه . به صورت زير :
[DataObjectMethod(DataObjectMethodType.Select, false)]
public static EmployeesCollection SelectListByDepartmentID(int departmentID,int startRowIndex, int maximumRows, string sortExpression)
{
return EmployeesDB.SelectListByDepartmentID( departmentID, startRowIndex, maximumRows, sortExpression);
}

public static int SelectListByDepartmentIDCount(int departmentID)
{
if (context.Cache["GetListByDepartmentIDCount"] == null)
context.Cache["GetListByDepartmentIDCount"] = EmployeesDB.SelectListByDepartmentIDCount(departme ntID);
return (int)context.Cache["GetListByDepartmentIDCount"];
}

اين متد با ObjectDataSource اي به شكل زير بدرستي كار ميكنه هم Sorting و هم Paging

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DataObjectTypeName="MD.Toos.BusinessEntities.Employees" DeleteMethod="Delete"
InsertMethod="Insert" OldValuesParameterFormatString="original_{0}"
SelectMethod="SelectListByDepartmentID" TypeName="MD.Toos.Bll.EmployeesManager"
UpdateMethod="Update" EnablePaging="True"
SelectCountMethod="SelectListByDepartmentIDCount"
SortParameterName="sortExpression" >
<DeleteParameters>
<asp:Parameter Name="Id" Type="Int32" />
</DeleteParameters>
<SelectParameters>
<asp:Parameter DefaultValue="1" Name="departmentID" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>حال اگه من EnableCahce ="true" رو در ObjectDataSource اعمال كنم . Page هاي كه كاربر قبلا Visit كرده رو Cache ميكنه ولي در اين حالت(وقتي كه كش فعال باشه) Sorting كار نميكنه :ناراحت:.

mehdi.mousavi
پنج شنبه 10 دی 1388, 14:07 عصر
سلام. ممنون از راهنماييتون. حال اگه من EnableCahce ="true" رو در ObjectDataSource اعمال كنم . Page هاي كه كاربر قبلا Visit كرده رو Cache ميكنه ولي در اين حالت(وقتي كه كش فعال باشه) Sorting كار نميكنه :ناراحت:.

سلام.
خواهش میکنم. دلیل این مساله رو میتونید اینجا بخونید. (http://stackoverflow.com/questions/1974162/gridview-sorting-doesnt-work-when-i-enable-caching-in-custome-paging-and-sorting) مهم اینه که بدونید داده ها کی Cache میشن...

من عموما خودم داده ها رو Cache میکنم، چون اونوقت میتونم در بخشهای دیگه هم از همین داده های Cache شده استفاده کنم. اما کاری که شما انجام میدید، شما رو محدود به همین Object Data Source خاص میکنه...

موفق باشید.