程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> OutlookGrid:以Outlook樣式分組和排列數據項(4)

OutlookGrid:以Outlook樣式分組和排列數據項(4)

編輯:關於C語言

在執行上面的代碼之後,網格將按字母排序顯示所有分組的數據項。另一方面,如果您想要排序列表,但是因為一些隱私的原因不想將數據項分組,只要在調用Sort方法前設置outlookGrid1.GroupTemplate = null。

作為選擇之一,OutlookGrid支持附加函數以定義數據項如何被顯示:

CollapseAll()將折疊網格中的所有分組,使得所有數據項看不見而只顯示分組。

ExpandAll()將展開所有分組,顯示所有分組和它們的數據項。

ClearGroups()將移走所有分組,並只顯示數據項。

CollapseIcon 和 ExtendIcon屬性定義了 在分組中的+ 和 –號。如果它們設置為not,+ 和 –是不會繪制的。

當然,OutlookGrid也支持所有其它眾所周知的DataGridVIEw方法和屬性。

綁定數據

現在我們已看到網格是如何為綁定數據工作的,我現在將簡要解釋網格是如何用非綁定數據構建的。網格可以像DataGridVIEw一樣地被構建,使用Columns.Add()和Rows.Add()方法。然而,在創建行時一個異常被拋出:每一個row必須是OutlookGridRow類型!用row的CreateCells()函數在每一行中填充單元格,並添加該行到網格的Rows集合(譯注:此處一定需要結合程序來看):

//首先清除然後先前的綁定(如果它們已被設置的話)
    outlookGrid1.BindData(null, null);
//創建列的頭(譯注:即網格的表頭)
    outlookGrid1.Columns.Add("column1", "Id");
    outlookGrid1.Columns.Add("column2", "Name");
    etc...
// 然後創建行
// row 1:第1行:
    OutlookGridRow row = new OutlookGridRow();
    row.CreateCells(outlookGrid1, id1, name1, ...);
    outlookGrid1.Rows.Add(row);
// row 2:第2行:
    OutlookGridRow row = new OutlookGridRow();
    row.CreateCells(outlookGrid1, id2, name2, ...);
    outlookGrid1.Rows.Add(row);//etc...等等...

因為我們沒有潛在的數據源可以被用來排序該網格,排序必須基於網格自己的內容。這意味著在排序中,網格自身的數據項將需要被比較。用OutlookGridRowComparer對象來做這件事。這個比較對象只基於它們的字符串值比較列表中的數據項。然而,一個更容易的選擇是使用可選的Sort()方法,只確定要排序的列和排序的方向(升序或降序):

// 設置被用來分組的列
    outlookGrid1.GroupTemplate.Column = outlookGrid1.Columns[e.ColumnIndex];

//然後選擇兩個排序方法之一
//選擇1:容易的方法,用OutlookGridRowComparer對象
    outlookGrid1.Sort(new OutlookGridRowComparer(ColumnIndex, direction));
//選擇2:更加容易的方法,確定用哪一列來排序
    outlookGrid1.Sort(outlookGrid1.Columns[ColumnIndex], direction);

‘代碼用法’的介紹到此結束。到目前為止,基本排序和分組功能工作的相當好,甚至對於更大的數據集也是這樣;比如,Invoice示例包含了超過2000個記錄,但仍然在我的電腦上執行得相當棒。(本文)給出的該代碼是完全用C#編寫,這一點也不壞!B-)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved