فرض کنید لیستی از مطالب را به فرمت ذیل در اختیار داریم:
namespace jqGrid10.Models
{
public class Post
{
public int Id { set; get; }
public string Title { set; get; }
public string CategoryName { set; get; }
public int NumberOfViews { set; get; }
}
}
میخواهیم آنها را با شرایط ذیل گروه بندی کنیم:
- گروه بندی بر روی ستون CategoryName انجام شود.
- ستونی که بر روی آن گروه بندی انجام میشود، نمایش داده نشود.
- در ابتدای نمایش گروهها، تمام آنها به صورت جمع شده و Collapsed نمایش داده شوند.
- پس از نمایش گروهها، اولین گروه به صورت خودکار باز شود.
- تعداد ردیف هر گروه به عنوان گروه اضافه شود.
- جمع کل ستون تعداد بار مشاهدات هر گروه قابل محاسبه شود.
- جمع کل هر گروه در زمانیکه هر گروه نیز بستهاست نمایش داده شود.
- رنگ ردیف جمع کل قابل تنظیم باشد.
فعال سازی گروه بندی در jqGrid فعال سازی گروه بندی در jqGrid به سادگی افزودن تعاریف ذیل است:
$('#list').jqGrid({
caption: "آزمایش دهم",
//...
grouping: true,
groupingView: {
groupField: ['CategoryName'],
groupOrder: ['asc'],
groupText : ['<b>{0} - {1} ردیف</b>'],
groupDataSorted: true,
groupColumnShow: false,
groupCollapse: true,
groupSummary: [true],
showSummaryOnHide: true
}
});
grouping: true سبب میشود تا گروه بندی فعال شود. سپس نیاز است ستون یا ستونهایی را که قرار است بر روی آنها گروه بندی صورت گیرد، معرفی کنیم. اینکار توسط خواص شیء groupingView انجام میشوند.
groupField بیانگر آرایهای از ستونهایی است که قرار است بر روی آنها گروه بندی صورت گیرد.
groupOrder آرایهای اختیاری از مقادیر asc یا desc است که متناظر هستند با نحوهی مرتب سازی پیش فرض ستونهای معرفی شده در آرایه groupField.
groupText آرایهای اختیاری از عناوین گروه بندیهای انجام شدهاست. اگر ذکر شود، {0} آن با نام گروه و {1} آن با تعداد عناصر گروه جایگزین میشود.
تنظیم groupDataSorted سبب خواهد شد تا نام ستونی که بر روی آن گروه بندی صورت میگیرد، به سرور ارسال شود (توسط پارامتر sidx). به این ترتیب در سمت سرور میتوان اطلاعات را به صورت پویا مرتب سازی کرده و بازگشت داد.
با تنظیم groupColumnShow به false سبب خواهیم شد تا ستونهای معرفی شده در قسمت groupField نمایش داده نشوند.
با تنظیم groupCollapse به true، در ابتدای نمایش گروهها، ردیفهای آنها نمایش داده نخواهند شد و در حالت جمع شده قرار میگیرند.
groupSummary به معنای فعال سازی نمایش ردیف محاسبهی summary مانند sum، min، max و امثال آن بر روی یک گروه است.
اگر مقدار showSummaryOnHide مساوی true باشد، ردیف محاسبهی summary حتی در حالت groupCollapse: true نمایش داده خواهد شد.
فعال سازی محاسبهی جمع ستون تعداد بار مشاهدات مطالب
برای فعال سازی نهایی محاسبهی جمع ستون تعداد بار مشاهدات، علاوه بر تنظیم groupSummary به true، نیاز است در همان ستون مشخص کنیم که این محاسبات چگونه باید انجام شوند:
colModel: [
// ........
{
name: '@(StronglyTyped.PropertyName<Post>(x => x.Title))',
index: '@(StronglyTyped.PropertyName<Post>(x => x.Title))',
align: 'right',
width: 150,
summaryTpl: '<div style="text-align: left;">خلاصه </div>',
summaryType: function (val, name, record) {
return "";
}
},
// ........
{
name: '@(StronglyTyped.PropertyName<Post>(x => x.NumberOfViews))',
index: '@(StronglyTyped.PropertyName<Post>(x => x.NumberOfViews))',
align: 'center',
width: 70,
summaryType: 'sum', summaryTpl: '<b>جمع مشاهدات: {0}</b>'
}
],
خاصیت summaryType نوع متد محاسبهی summary مانند sum را مشخص میکند. خاصیت summaryTpl اختیاری است. اگر ذکر شود سبب فرمت مقدار محاسبه شدهی نهایی میگردد. در اینجا {0} به مقدار نهایی که قرار است در این سلول درج شود، اشاره میکند.
summaryType مانند ستون عنوان، سفارشی شده نیز میتوان باشد. در ردیف summary و ستون عنوان تنها میخواهیم یک مقدار ثابت را نمایش دهیم، به همین جهت summaryType آن به یک مقدار خالی تنظیم شدهاست.
تغییر رنگ ردیف خلاصه عملیات هر گروه به همراه گشودن خودکار اولین گروه
گروه بندی به همراه یک سری متد توکار نیز هست. برای مثال اگر متد groupingToggle را بر روی Id هر گروه فراخوانی کنیم، میتوان سبب باز یا بسته شده آن گروه شد. متدهای دیگری مانند groupingGroupBy برای گروه بندی پویا و groupingRemove برای حذف گروه بندی نیز وجود دارند:
$('#list').jqGrid({
caption: "آزمایش دهم",
//.........
loadComplete: function() {
//.........
$('#list').jqGrid('groupingToggle', 'list' + 'ghead_0_0');
$("tr.jqfoot td").css({
"background": "#2f4f4f",
"color": "#FFF"
});
},
});
بهترین محل اعمال رنگ به ردیفهای summary، در روال رویدادگردان loadComplete گرید است.
مثال کامل این قسمت را از اینجا میتوانید دریافت کنید: jqGrid10.zip