翻譯|使用教程|編輯:龔雪|2024-10-12 11:15:57.300|閱讀 109 次
概述:本文主要為大家介紹如何用DevExpress WinForms中熱門的數據網格組件完成信息點擊獲取,歡迎下載最新版體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在使用DevExpress WinForms的Data Grid之類控件時,可能需要實現自定義用戶交互,例如顯示數據行的上下文菜單,或者在雙擊一行時調用編輯表單。在這些情況下,您需要在指定的坐標處標識網格元素。
在本教程中,您將學習如何獲取此信息。首先將顯示工具提示,指示當前在鼠標光標下的是哪個元素;然后將使用命中信息來實現自定義過濾UI。當最終用戶右鍵單擊列單元格時,將根據所單擊的單元格的值過濾該列。通過單擊自動篩選行,他們可以清除單個列或整個視圖中的篩選器。
P.S:DevExpress WinForms擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
獲取DevExpress WinForms v24.1正式版下載
DevExpress技術交流群10:532598169 歡迎一起進群討論
從一個具有啟用了自動篩選行的GridControl的應用程序開始。
跳轉到設計時,將組件放到窗體上,并將其分配給網格的屬性。
然后,處理ToolTipController的事件。在事件處理程序中,調用View的方法,該方法接受網格中的坐標,并返回一個新創建的hit信息對象,該對象包含View元素在指定位置的信息。使用 屬性來獲得目標元素類型,最后將元素的名稱設置為工具提示文本。
C#
private void toolTipController1_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e) { if (e.SelectedControl != gridControl1) return; GridView view = gridControl1.FocusedView as GridView; // Obtain hit information. GridHitInfo gridHitInfo = view.CalcHitInfo(e.ControlMousePosition); // Display the name of the element under a test point. object o = gridHitInfo.HitTest.ToString(); string text = gridHitInfo.HitTest.ToString(); e.Info = new ToolTipControlInfo(o, text); }
運行應用程序來查看結果,當您用鼠標指針懸停網格控件元素時,工具提示將顯示目標元素的名稱。
現在看看如何使用點擊信息來修改用戶交互。
關閉應用程序,選擇網格并處理其MouseDown事件。和前面一樣,調用方法來獲取hit信息對象,檢查它是否是右鍵,以及測試點是否在網格行內。
屬性標識被單擊的行,檢查此屬性是否返回自動篩選器行句柄。如果測試點位于自動篩選行指示符中,則通過調用網格的對象的Clear方法清除所有應用的篩選條件。如果單擊不在行指示符區域中,則必須在其中一列中。使用hit info對象的屬性獲取目標列,并僅清除該列的過濾器。
如果單擊是在一行上,而不是在自動篩選器行上,則代碼假定它是其中一個數據行。為了獲得被點擊單元格的值,調用網格的方法,并傳遞被點擊的info對象的 和屬性,然后使用返回值篩選單擊的列。
C#
private void gridControl1_MouseDown(object sender, MouseEventArgs e) { GridView view = (sender as GridControl).FocusedView as GridView; // Obtain hit information. GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y)); // Check whether an end-user right-clicked a grid row. if (((e.Button & MouseButtons.Right) != 0) && (hitInfo.InRow)) { // Specify actions for the auto-filter row. if (hitInfo.RowHandle == GridControl.AutoFilterRowHandle) // If the target element is a row indicator, clear the current filter. if (hitInfo.HitTest == GridHitTest.RowIndicator) view.ActiveFilter.Clear(); // Clear the column's filter. else hitInfo.Column.FilterInfo = new ColumnFilterInfo(); // Filter grid data by the target cell's value. else { object value = view.GetRowCellValue(hitInfo.RowHandle, hitInfo.Column); hitInfo.Column.FilterInfo = new ColumnFilterInfo(hitInfo.Column, value); } } }
運行應用程序,右鍵單擊任何具有New狀態的單元格,可以看到網格的數據現在已被此值過濾。以同樣的方式,通過單擊Low優先級和Mike Roller單元格篩選數據。然后,右鍵單擊自動篩選行中的Priority單元格來清除此列的篩選,右鍵單擊自動過濾器行的指示符,以清除所有現有的過濾器設置。
更多產品資訊及授權,歡迎“”!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網