翻譯|使用教程|編輯:龔雪|2025-03-04 11:19:09.000|閱讀 120 次
概述:本文主要介紹如何使用DevExpress WinForms Data Grid組件實現識別行操作,歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress WinForms擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
在本教程中,您將了解到DevExpress WinForms網格視圖標識其行的方式。
在上文中(),我們為大家介紹了純數據中的行標識符、排序和過濾數據時行標識符之間的差異等,本文將繼續介紹分組數據時行標識符之間的差異、特殊行句柄等,歡迎下載最新版組件體驗~
獲取DevExpress WinForms v24.2正式版下載
DevExpress技術交流群11:749942875 歡迎一起進群討論
行句柄和數據源索引之間的差異
接下來看看分組數據時會發生什么,行句柄和數據源索引之間的關鍵區別之一是,組行的行句柄是負整數。顯然沒有用于組行的數據源索引,因為它們不存在于數據源中,因此組行中顯示的值是組中第一個數據行的索引。還有一件值得注意的事情是,數據行的句柄總是非負整數。
使用行句柄遍歷行
如果您想遍歷網格控件內存中的所有行,可以簡單地枚舉從0到View的屬性的行句柄。
看一下Clear Name按鈕的Click事件處理程序,它正是這樣做的,以便為所有當前加載的行清除Name列中的值。處理程序代碼被封裝到和方法調用中,以避免對視圖進行多次更新。它從等于0的行句柄開始,然后枚舉到屬性值為止的所有整數,循環體調用 方法來清除Name列中的值。
C#
private void barButtonClearName_ItemClick(object sender, ItemClickEventArgs e) { gridView1.BeginUpdate(); int rowHandle = 0; while (rowHandle < gridView1.DataRowCount) { gridView1.SetRowCellValue(rowHandle, colName, string.Empty); rowHandle++; } gridView1.EndUpdate(); }
運行應用程序。首先過濾記錄,只顯示Audis,單擊該按鈕并查看清除的名稱。現在刪除過濾并通過Make對數據進行分組,您將看到Audis組中的Name列已被清除,但其他品牌仍然擁有該數據。
因此只有匹配篩選條件的行才會加載到內存中,如果現在按Clear Name 按鈕,更改將影響展開或折疊組中的所有行。
行句柄和可見索引之間的差異
分組視圖還揭示了行句柄和可見索引之間的重要區別。首先,可見索引仍然從0開始,并且該值隨著每個可見行(無論是組行還是數據行)而增加。其次,您會注意到行句柄已經分配給加載到內存中的所有行,包括折疊組中的行,對組行的展開和折疊操作不會影響行句柄。另一方面,可視索引將在每次展開狀態更改時重新計算,以考慮已變為可見或隱藏的行。
使用可見索引
為了說明可見索引的用法,實現一個導航到視圖中下一個可見行的按鈕——這是按下DOWN鍵的替代方法。處理程序首先使用 方法確定焦點行的可見索引,該方法將行句柄作為參數。接下來代碼增加獲得的可見索引,最后使用 方法將其轉換回行句柄值,并使用這個新獲得的句柄設置焦點。
C#
private void barButtonNextRow_ItemClick(object sender, ItemClickEventArgs e) { int visibleIndex = gridView1.GetVisibleIndex(gridView1.FocusedRowHandle); visibleIndex++; gridView1.FocusedRowHandle = gridView1.GetVisibleRowHandle(visibleIndex); }
本教程中最后值得一提的一點是,為特殊類型的行(如New Item Row)分配預定義的行句柄值。
要查看如何使用這些預定義值,請處理事件。網格控件具有指定它們的靜態字段,這還包括值,如果無法獲得行句柄,則由某些方法返回該值。在代碼中,檢查當前行是否為New Item Row,如果是,則顯示確認消息框。
C#
private void gridView1_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e) { if (e.RowHandle == DevExpress.XtraGrid.GridControl.NewItemRowHandle) { DialogResult result = MessageBox.Show("Are you done editing the new record?", "Confirmation", MessageBoxButtons.YesNo); e.Allow = (result == System.Windows.Forms.DialogResult.Yes); } }
運行應用程序,聚焦新建項目行,然后嘗試將焦點更改回其中一個數據行。如果單擊“No”,焦點將保持不變。
網格視圖提供了允許您將行標識符相互轉換的方法,要了解其工作原理,請分析在此應用程序中顯示行索引信息的處理程序。
有三列,一列顯示可見索引,另一行顯示句柄,第三列顯示數據源索引,該代碼首先使用作為參數傳遞的行句柄獲取數據源索引。然后使用行句柄確定可見索引,之后所有的值都顯示在相應的列中。
C#
using DevExpress.XtraGrid.Views.Grid; //... private void GridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { GridView view = sender as GridView; int dataSourceRowIndex = view.GetDataSourceRowIndex(e.RowHandle); int visibleIndex = view.GetVisibleIndex(e.RowHandle); if(e.Column.FieldName == "gridColumnRowHandle") e.DisplayText = e.RowHandle.ToString(); if(e.Column.FieldName == "gridColumnVisibleIndex") e.DisplayText = visibleIndex.ToString(); if(e.Column.FieldName == "gridColumnListSourceIndex") e.DisplayText = dataSourceRowIndex.ToString(); }
更多產品資訊及授權,歡迎來電咨詢:023-68661681
慧都科技是專注軟件工程、智能制造、石油工程三大行業的數字化解決方案服務商。在軟件工程領域,我們提供開發控件、研發管理、代碼開發、部署運維等軟件開發全鏈路所需的產品,提供正版授權采購、技術選型、個性化維保等服務,幫助客戶實現技術合規、降本增效與風險可控。
慧都科技是DevExpress的中國區的合作伙伴,DevExpress作為用戶界面領域的優秀產品,幫助企業高效構建權限管理、數據可視化(如網格/圖表/儀表盤)、跨平臺系統(WinForms/ASP.NET/.NET MAUI)及行業定制解決方案,加速開發并強化交互體驗。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網