国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

如何對(duì)ComponentOne FlexGrid的DataMap列進(jìn)行自定義排序?

在使用C1Flexgrid的DataMap屬性時(shí),我們可以將列設(shè)置單元格的值和展示值相關(guān)聯(lián),并對(duì)其進(jìn)行排序。但有些客戶需要基于展示值對(duì)列進(jìn)行排序,本文就介紹了如何實(shí)現(xiàn)這個(gè)需求。1. 綁定數(shù)據(jù)源首先,我

在使用C1Flexgrid的DataMap屬性時(shí),我們可以將列設(shè)置單元格的值和展示值相關(guān)聯(lián),并對(duì)其進(jìn)行排序。但有些客戶需要基于展示值對(duì)列進(jìn)行排序,本文就介紹了如何實(shí)現(xiàn)這個(gè)需求。

1. 綁定數(shù)據(jù)源

首先,我們需要將C1Flexgrid綁定到數(shù)據(jù)源。假設(shè)我們保存了Northwind數(shù)據(jù)源的Products數(shù)據(jù)表,然后創(chuàng)建兩個(gè)Dictionary對(duì)象,分別用來(lái)設(shè)置SupplierID列和CategoryID列的DataMap屬性。下面代碼展示CompanyName替代SupplierID,CategoryName替代CategoryID。

// 加載數(shù)據(jù)

var dtProducts GetDataTable("Products");

var dtCategories GetDataTable("Categories");

var dtSuppliers GetDataTable("Suppliers");

// 創(chuàng)建兩個(gè)數(shù)據(jù)映射

var mapCat new Dictionary();

foreach (DataRow row in )

{

var key (int)row["CategoryID"];

var val (string)row["CategoryName"];

mapCat[key] val;

}

var mapSup new Dictionary();

foreach (DataRow row in )

{

var key (int)row["SupplierID"];

var val (string)row["CompanyName"];

mapSup[key] val;

}

// 綁定C1Flexgrid到數(shù)據(jù)源

grid_ dtProducts;

// 添加數(shù)據(jù)映射

["CategoryID"].DataMap mapCat;

["SupplierID"].DataMap mapSup;

如果運(yùn)行上述代碼并嘗試對(duì)CategoryID/SupplierID列進(jìn)行排序,它們會(huì)按照關(guān)鍵值進(jìn)行排序。

2. 添加排序代碼

為了根據(jù)展示的值進(jìn)行排序,我們需要添加如下代碼。主要是處理BeforeSort事件,將新列添加到數(shù)據(jù)表中,這個(gè)新列是隱藏的,由mapped值填充。表格會(huì)基于該新列進(jìn)行排序,而不是單擊的列。這樣就會(huì)根據(jù)展示的值排序而不是關(guān)鍵值。代碼如下:

// 用于執(zhí)行實(shí)際排序的隱藏列名

const string SORT_COL_NAME "_dtSort";

// 正在用作隱藏源列的列

_sourceColumn;

// 自定義排序(使用映射值而不是原始值)

void _flex_BeforeSort(object sender, e)

{

// 如果該列包含數(shù)據(jù)映射

_sourceColumn _[];

if (_ ! null)

{

// 為排序添加一個(gè)隱藏列

var dt _ as DataTable;

if (!(SORT_COL_NAME))

{

var dcol (SORT_COL_NAME);

_[SORT_COL_NAME].Visible false;

}

// 刪除當(dāng)前排序(如果有的話)

string.Empty;

// 填充排序列

foreach (DataRow dr in )

{

var key dr[_];

dr[SORT_COL_NAME] _[key];

}

// 應(yīng)用新排序

var sort SORT_COL_NAME;

if ((e.Order ) ! 0)

{

sort " DESC";

}

sort;

// 已處理

e.Handled true;

}

}

3. 更新排序內(nèi)容

最后一個(gè)問(wèn)題是如何處理AfterEdit事件,在編輯包含數(shù)據(jù)映射的列時(shí),自動(dòng)更新排序。代碼如下:

// 當(dāng)用戶編輯正在進(jìn)行排序的列時(shí),更新排序列

void _flex_AfterEdit(object sender, e)

{

if (_[] _sourceColumn)

{

// 刷新排序列內(nèi)容

var dt _ as DataTable;

foreach (DataRow dr in )

{

var key dr[_];

dr[SORT_COL_NAME] _[key];

}

}

}

通過(guò)以上步驟,我們就可以實(shí)現(xiàn)基于展示值對(duì)C1Flexgrid的DataMap列進(jìn)行自定義排序的功能了。

標(biāo)簽: