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