原創(chuàng)|其它|編輯:郝浩|2012-09-26 11:30:36.000|閱讀 746 次
概述:有時(shí)候客戶想要在一個(gè)域內(nèi)對(duì)ASPxGridView的欄進(jìn)行分組,而在另一個(gè)域內(nèi)對(duì)其排序。本文中,我想描述一下如何通過(guò)不同的方法實(shí)現(xiàn)這個(gè)特點(diǎn)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
有時(shí)候客戶想要在一個(gè)域內(nèi)對(duì)的欄進(jìn)行分組,而在另一個(gè)域內(nèi)對(duì)其排序。本文中,我想描述一下如何通過(guò)不同的方法實(shí)現(xiàn)這個(gè)特點(diǎn)。因?yàn)椋@并不像它可能看起來(lái)的那樣簡(jiǎn)單。
在設(shè)計(jì)時(shí),我們創(chuàng)建了一個(gè)簡(jiǎn)單的網(wǎng)格,它的數(shù)據(jù)從數(shù)據(jù)源控件處獲得。我們想按城市來(lái)對(duì)ASPxGridView進(jìn)行分組,而按國(guó)家對(duì)它進(jìn)行排序。
這個(gè)任務(wù)可以通過(guò)以下幾種方法來(lái)解決:
1.通過(guò)自定義欄位排序:按城市將網(wǎng)格分組,但是通過(guò)自定義欄位排序事件按國(guó)家對(duì)其排序。
2.在另一個(gè)域內(nèi)對(duì)網(wǎng)格排序:按城市將網(wǎng)格分組,但是通過(guò)分組匯總排序信息類按國(guó)家對(duì)其排序。
3.通過(guò)自定義匯總類型對(duì)網(wǎng)格排序:按城市將網(wǎng)格分組,但是通過(guò)分組匯總排序信息類和自定義匯總計(jì)算事件按國(guó)家對(duì)其排序。
4.通過(guò)它們的名字對(duì)值進(jìn)行排序:使用GridViewDataComboBoxColumn文本完成分組。
下面,你可以找到一些關(guān)于這些任務(wù)的更詳細(xì)的描述:
1.自定義欄位排序:按城市將ASPxGridView分組,但是通過(guò)自定義欄位排序事件按國(guó)家對(duì)其排序。
要使用這種方法,你應(yīng)該運(yùn)用ASPxGridView.CustomColumnSort 事件。一個(gè)欄的Settings.SortMode 屬性指定了當(dāng)對(duì)這個(gè)欄進(jìn)行排序時(shí),網(wǎng)格的數(shù)據(jù)是如何被排序的。在我們這個(gè)例子中,屬性值被設(shè)為‘自定義’。因此,一個(gè)針對(duì)‘城市’欄的自定義排序算法將會(huì) 通過(guò)處理自定義欄位排序事件被執(zhí)行。
[ASPx]
<dx:GridViewDataTextColumn FieldName="City" VisibleIndex="2" GroupIndex="0"> <Settings SortMode="Custom"/> </dx:GridViewDataTextColumn>
在自定義欄位排序事件句柄中,我們對(duì)兩行進(jìn)行了比較。通過(guò)CustomColumnSortEventArgs.Column 參數(shù)來(lái)指定被處理的欄位。CustomColumnSortEventArgs.Value1 和CustomColumnSortEventArgs.Value2 兩個(gè)參數(shù)區(qū)分出在這個(gè)欄中的行值。
自定義比較的結(jié)果用來(lái)設(shè)定CustomColumnSortEventArgs.Result 的參數(shù),如下所示:
我們把e.handled參數(shù)的值設(shè)為真,從而忽略掉默認(rèn)的比較機(jī)制。
[C#]
protected void gridCustomers_CustomColumnSort(object sender, CustomColumnSortEventArgs e) {
if (e.Column != null & e.Column.FieldName == "City") {
object country1 = e.GetRow1Value("Country");
object country2 = e.GetRow2Value("Country");
int res = Comparer.Default.Compare(country1, country2);
if (res == 0) {
object city1 = e.Value1;
object city2 = e.Value2;
res = Comparer.Default.Compare(city1, city2);
}
e.Result = res;
e.Handled = true;
}
}
2.在另一個(gè)域內(nèi)對(duì)ASPxGridView排序:按城市將ASPxGridView分組,但是通過(guò)分組匯總排序信息類按國(guó)家對(duì)其排序。
根據(jù)ASPxGroupSummarySortInfo對(duì)象提供的信息,基于此信息得到的匯總值來(lái)將組中的行排序。這些對(duì)象引入的屬性代表了排序次序,用來(lái)計(jì)算匯總值的匯總項(xiàng),等等。這些屬性是只讀的,并且由構(gòu)造函數(shù)來(lái)初始化。
通過(guò)匯總值來(lái)排序組中的行,創(chuàng)建一個(gè)ASPxGroupSummarySortInfo對(duì)象,使用 GroupSummarySortInfoCollection.Add 方法把它添加到ASPxGridView的分組匯總排序信息集合里。把ASPxGroupSummarySortInfo對(duì)象添加到這個(gè)集合以后,組中的 行就會(huì)根據(jù)它們的匯總值自動(dòng)的排序。
[C#]
gridCustomers.GroupSummarySortInfo.Clear();
ASPxGroupSummarySortInfo sortInfo = new ASPxGroupSummarySortInfo();
sortInfo.SortOrder = ColumnSortOrder.Ascending;
sortInfo.SummaryItem = gridCustomers.GroupSummary["Country", SummaryItemType.Min];
sortInfo.GroupColumn = "City";
3.通過(guò)自定義匯總類型對(duì)ASPxGridView排序:按城市將ASPxGridView分組,但是通過(guò)分組匯總排序信息類和自定義匯總計(jì)算事件按國(guó)家對(duì)其排序。
這種方法與前一種方法的不同點(diǎn)僅僅在于排序機(jī)制使用了一個(gè)自定義的匯總值。匯總自定義計(jì)算法則應(yīng)用到自定義匯總計(jì)算事件句柄中。自定義匯總計(jì)算事件會(huì)觸發(fā) 匯總計(jì)算中涉及到的每一行。當(dāng)計(jì)算總的匯總值的時(shí)候,該事件將會(huì)被每一個(gè)數(shù)據(jù)行觸發(fā)。在當(dāng)前這個(gè)例子里,為了簡(jiǎn)單起見(jiàn),自定義的總的匯總值等于子匯總值。
請(qǐng)參考ASPxGridView.CustomSummaryCalculate 事件和自定義匯總函數(shù),這有助于學(xué)習(xí)更多關(guān)于自定義匯總計(jì)算過(guò)程的知識(shí)。
[C#]
gridCustomers.GroupSummarySortInfo.Clear();
ASPxGroupSummarySortInfo sortInfo = new ASPxGroupSummarySortInfo();
sortInfo.SortOrder = ColumnSortOrder.Ascending;
sortInfo.SummaryItem = gridCustomers.GroupSummary["Country", SummaryItemType.Custom];
sortInfo.GroupColumn = "City";
gridCustomers.GroupSummarySortInfo.AddRange(sortInfo);
[C#]
protected void gridCustomers_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
ASPxSummaryItem item = e.Item as ASPxSummaryItem;
if (item.FieldName == "Country") {
if (e.SummaryProcess == CustomSummaryProcess.Finalize)
e.TotalValue = e.FieldValue.ToString();
}
}
4.通過(guò)它們的名字對(duì)值進(jìn)行排序:使用GridViewDataComboBoxColumn文本完成分組。
想通過(guò)文本而不是值來(lái)對(duì)GridViewDataComboBoxColumn進(jìn)行排序的話,你應(yīng)該將ASPxGridViewBehaviorSettings.SortMode 屬性值設(shè)為‘顯示文本’。
[ASPx]
<SettingsBehavior SortMode="DisplayText" />
同樣,這種方法演示了如何為已分組的欄顯示一個(gè)自定義文本。你應(yīng)該使用GroupRowContent模板來(lái)完成這個(gè)任務(wù)。
[ASPx]
<Templates> <GroupRowContent> <%# "Category: " + Container.GroupText%> </GroupRowContent> </Templates>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:DevExpress中文網(wǎng)