日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤

發布時間:2023/11/30 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C1FlexGrid過濾

表格中的數據過濾通常有兩種形式:

· 基于表頭:過濾器的圖標出現在有一個過濾器適用于它的每一列。用戶可以通過點擊過濾器的圖標來查看和編輯過濾器。這是Windows 7或Vista或C1FlexGrid控件使用的機制。這種類型的過濾器的主要優點是:(1)用戶可以看到哪些列被過濾了,(2)過濾不需要屏幕上的額外的不動產,(3)這種類型的過濾器可以更好地過濾編輯器并更容易定制。

· 過濾器行:過濾器行保持始終可見,使用戶可以直接到該行中鍵入值或表達式。這種類型的過濾器的主要優點是,用戶隨時都可以看到哪些列正在被過濾和當前過濾器的標準是什么。主要缺點是過濾器占用一些不動產,且可能會干擾常規的表格運行。雖然過濾器行沒有建立在C1FlexGrid控件上,但他們實施起來還是相對容易。我們提供了一個“過濾器行”示例來顯示如何做到這一點。

下面介紹的代碼樣本,主要取自包括產品的兩個新樣本:列過濾器和自定義過濾器。請參閱表明行動的特點的完整的項目樣本。

如果您是第一次閱讀本系列文章,建議您閱讀:

  • ComponentOne FlexGrid for WinForms 中文版快速入門(1)--開始使用 FlexGrid
  • ComponentOne FlexGrid for WinForms 中文版快速入門(2)--設計時支持
  • ComponentOne FlexGrid for WinForms 中文版快速入門(3)--單元格、行列交互
  • ComponentOne FlexGrid for WinForms 中文版快速入門(4)--設置單元格格式
  • ComponentOne FlexGrid for WinForms 中文版快速入門(5)--設置單元格類型(上)
  • ComponentOne FlexGrid for WinForms 中文版快速入門(5)--設置單元格類型(下)
  • ComponentOne FlexGrid for WinForms 中文版快速入門(6)—合并單元格
  • ComponentOne FlexGrid for WinForms 中文版快速入門(7)—概述和匯總數據(上)
  • ComponentOne FlexGrid for WinForms 中文版快速入門(7)—概述和匯總數據(下)
1.1.1 允許過濾屬性

要使用以表頭為基礎的過濾器,C1FlexGrid控件遵循了與用來實現列的移動和按大小排序的相同的模式。表格有一個新的“允許過濾”屬性,可用于控制在控件級別過濾,并且表格的列對象也有一個“允許過濾”屬性,可用于控制在列級別過濾。

要啟用簡單的過濾方案,用戶只需設置表格的“允許過濾”屬性為“真”。然后,他們可以通過改變列的“允許過濾”屬性的值來禁用或自定義過濾特定列的行為。列的“允許過濾”屬性可以設置為下列值之一:

· 默認:表格會自動創建一個 “列過濾”類型的過濾器。該過濾器將“值過濾”和“條件過濾”結合了起來,兩者都在下文中有所描述。

· 根據值:表格會自動創建一個“值過濾”類型的過濾器。該過濾器包含一個應顯示的值的列表。任何列表上不存在的值,最終用戶都是看不到的。

· 根據條件:表格會自動創建一個“條件過濾”類型的過濾器。該過濾器會指定兩個條件,如“大于”或“包含”。這些條件可以與AND或OR運算符號結合起來。

· 自定義:表格不會自動創建一個過濾器。開發人員預計實例化一個過濾器,并明確將其指定道列的“過濾器”屬性。

· 無:該列不能進行過濾。

默認情況下,C1FlexGrid控件會為使用指定的語言通過CurrentUICulture設置來將列過濾編輯器本地化。但是,你可以使用“語言”屬性來推翻默認并指定當表格顯示列過濾編輯器時應該使用的語言。

值過濾器

“值過濾器”概念上非常簡單。它包含一個值的列表,并且只有該表中列出的值才會顯示在表格上。如果列表設置為“無效的”,那么該過濾為“沒有活性的”,且所有的值會被顯示。這種類型的過濾器在過濾包含離散值,如名稱或枚舉,的列方面是被推薦的。

“值過濾”編輯器包括一個有復選框的值的列表。用戶可以一次選中或取消選中所有值。采用先進的內置鍵盤導航來瀏覽長的列表是很容易的。編輯器中實現一個靈活的搜索緩沖區,可以使用戶通過輸入值的任何部分來找到值。例如,輸入“希爾頓”,將選擇下一個其中包含“希爾頓”的值,包括“紐約希爾頓”,“王子愛德華希爾頓”,或“巴黎希爾頓”。此外,敲Ctrl+向上鍵或Ctrl +向下鍵將會導航到下一個或前一個檢查項目。使用目前分配給列的格式,值就會顯示在列表上。

這個圖像顯示了“值過濾”編輯器。

條件過濾器

“條件過濾器”比其他的更加靈活。它不是選擇特定的值,而是允許用戶用運算符號來指定兩個條件,如“大于”、“開始”或“包含”。這種類型的過濾器在過濾包含“連續的”值的列,如數字,或日期/時間值,在這方面是被推薦的。

這個圖像顯示了“條件過濾”編輯器。

有過濾器適用于列來顯示他們的標題過濾器的圖標,甚至當鼠標不在他們上面的時候。在這個圖像中你可以看到有“產品名稱”和“數量”列標題的地方顯示過濾器的圖標。

內置的過濾器支持自動定位在以下語言:英語,西班牙語,法語,意大利語,葡萄牙語,德國,荷蘭,俄羅斯,日本,希臘,丹麥,芬蘭,挪威,瑞典文,阿拉伯文,波蘭,中國,土耳其,波斯語,朝鮮語,希伯來語。該本地化資源是內置的,并不需要提供額外的DLL

自定義過濾器

可以創建自定義過濾器來處理專門的值。例如,自定義過濾器在過濾顏色、地理或自定義數據類型方面值得推薦。

要創建一個自定義的過濾器,開發人員必須創建兩個類:

· 過濾器:這個類必須實現IC1ColumnFilter接口,它可以指定過濾器應用到一個特定的值,對過濾器進行復位,并返回一個用于查看和編輯過濾器的參數的編輯器。

· 過濾編輯器:這個類必須繼承自Control,必須實現IC1ColumnFilterEditor的接口,該接口可以指定用于初始化編輯器和更改應用到過濾器的方法。

自定義過濾器的樣本包含三個自定義過濾器,用于過濾類型的顏色,日期/時間和字符串的值。

1.1.2 程序化地管理過濾器

正如我們前面提到的這個文件,設置表格的“允許過濾”屬性為“真”,這足以讓所有的列進行列過濾。然而,在許多情況下,你可能需要更精細的過濾控制。這可以通過修改個別列的“允許過濾”和“過濾”屬性來實現。例如,下面的代碼使能夠啟用過濾,但對過濾字符串類型的列進行了限制:

//綁定和配置表格

flex.DataSource = dtProducts;

_flex.Cols["UnitPrice"].Format = "#,###.00";

//啟用過濾

_flex.AllowFiltering = true;

//限制過濾“字符串”類型的列

foreach (Column c in _flex.Cols)

{

c.AllowFiltering = c.DataType == typeof(string)

? AllowFiltering.Default

: AllowFiltering.None;

}

你可以通過創建過濾器并將他們分配到列,或通過檢索現有的過濾器并修改其屬性,來進一步自定義過濾過程。例如,下面的代碼創建了一個“條件過濾器”,配置它來選擇所有以字母“C”開頭的項目,然后分配這個新的過濾器給“產品名稱”一列:

//創建一個新的“條件過濾器”

var filter = new ConditionFilter();

//配置過濾器來選擇以“C”開始的項目

filter.Condition1.Operator = ConditionOperator.BeginsWith;

filter.Condition1.Parameter = "C";

//分配新的過濾器到“產品名稱”列

_flexCustom.Cols["ProductName"].Filter = filter;

1.1.3 程序化地應用過濾器

當用戶編輯他們或當他們適用于一列時,過濾器是適用的。當數據發生變化時,它們不會自動應用。

要將過濾器應用到從表格加載的當前的數據,請調用表格的“應用過濾器”方法。

例如,當用戶編輯表格上的數據時,下面的代碼啟用了一個“應用過濾器”按鈕。點擊這個“應用過濾器”按鈕即可應用該過濾器,并可以直到下一次的變化前禁用該按鈕。

public Form1()

{

InitializeComponent();

//獲取一些數據

var da = new OleDbDataAdapter("select * from products",

GetConnectionString());

var dtProducts = new DataTable();

da.Fill(dtProducts);

//將表格綁定到數據_

flex.DataSource = dtProducts;

//啟用過濾

_flex.AllowFiltering = true;

//監測變化以便啟用“應用過濾器”按鈕

_flex.AfterEdit += _flex_AfterEdit;

}

上面的代碼可以將一個表格綁定到數據源,可以通過將“允許過濾”屬性設置為“真”來啟用過濾器,并可以連接一個事件處理程序到“編輯后”事件。事件處理程序的執行情況如下:

void _flex_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs

e)

{

foreach (C1.Win.C1FlexGrid.Column c in _flex.Cols)

{

if (c.ActiveFilter != null)

{

_btnApplyFilters.Enabled = true;

break;

}

}

}

此代碼可以掃描所有列,以確定一個過濾器是否為任何列所定義。如果檢測到有一個正在起作用的過濾器,該代碼可以啟用將過濾器應用于目前的數據的按鈕。當單擊該按鈕時,下面的事件處理程序會執行如下:

private void _btnApplyFilters_Click(object sender, EventArgs e)

{

_flex.ApplyFilters();

_btnApplyFilters.Enabled = false;

}

該代碼簡單適用于所有活躍著的過濾器,并且直到下一次的變化前才禁用按鈕。相反,如果你不需要一個按鈕,而只是簡單地想在每次編輯后應用該過濾器,你可以從“編輯后”事件處理器那里直接調用“應用過濾器”,如下所示:

void _flex_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs

e)

{

_flex.ApplyFilters();

轉載于:https://www.cnblogs.com/C1SupportTeam/archive/2012/12/14/2817412.html

總結

以上是生活随笔為你收集整理的ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。