翻譯|使用教程|編輯:龔雪|2025-08-13 11:22:54.967|閱讀 107 次
概述:本文主要介紹DevExpress WPF Grid控件如何在網(wǎng)格視圖數(shù)據(jù)布局中遍歷代碼中的行和單元格,歡迎下載最新版組件體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DevExpress WPF擁有120+個(gè)控件和庫(kù),將幫助您交付滿足甚至超出企業(yè)需求的高性能業(yè)務(wù)應(yīng)用程序。通過DevExpress WPF能創(chuàng)建有著強(qiáng)大互動(dòng)功能的XAML基礎(chǔ)應(yīng)用程序,這些應(yīng)用程序?qū)W⒂诋?dāng)代客戶的需求和構(gòu)建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產(chǎn)品,還是以數(shù)據(jù)為中心的商業(yè)智能產(chǎn)品,都能通過DevExpress WPF控件來實(shí)現(xiàn)。
在本文中您將學(xué)習(xí)到DevExpress WPF Grid控件如何在網(wǎng)格視圖數(shù)據(jù)布局中遍歷代碼中的行和單元格,歡迎下載最新版組件體驗(yàn)!
DevExpress技術(shù)交流群11:749942875 歡迎一起進(jìn)群討論
本文演示如何逐個(gè)訪問數(shù)據(jù)項(xiàng)。
DevExpress WPF GridControl通過句柄或可見索引標(biāo)識(shí)數(shù)據(jù)行,屬性返回可見組和數(shù)據(jù)行的總數(shù)。為了遍歷行,使用一個(gè)從0到屬性值的計(jì)數(shù)器。在這個(gè)代碼示例中,我們使用方法來獲取行句柄:
XAML
<dxg:GridControl x:Name="grid" ItemsSource="{Binding Source}" .../>
C#
List<int> rowHandles = new List<int>(); for (int i = 0; i < grid.VisibleRowCount; i++) { int rowHandle = grid.GetRowHandleByVisibleIndex(i); rowHandles.Add(rowHandle); }
VB.NET
Dim rowHandles As List(Of Integer) = New List(Of Integer)() For i As Integer = 0 To grid.VisibleRowCount - 1 Dim rowHandle As Integer = grid.GetRowHandleByVisibleIndex(i) rowHandles.Add(rowHandle) Next
屬性不考慮:
注意:當(dāng)您在GridControl的底部顯示New Item Row時(shí),屬性將其視為常規(guī)行。
要遍歷分組中的折疊行,請(qǐng)使用方法。此方法返回分組中當(dāng)前行的計(jì)數(shù)。創(chuàng)建一個(gè)類似于前一個(gè)的計(jì)數(shù)器,并使用方法來獲取組中行的句柄,使用 方法檢查行是否為分組行。
下面的示例展示如何獲取視圖中所有數(shù)據(jù)行的句柄(包括折疊組中的行),除了被過濾掉的行:
C#
private List<int> GetDataRowHandles() { List<int> rowHandles = new List<int>(); for (int i = 0; i < grid.VisibleRowCount; i++) { int rowHandle = grid.GetRowHandleByVisibleIndex(i); if (grid.IsGroupRowHandle(rowHandle)) { if (!grid.IsGroupRowExpanded(rowHandle)) { rowHandles.AddRange(GetDataRowHandlesInGroup(rowHandle)); } } else rowHandles.Add(rowHandle); } return rowHandles; } private List<int> GetDataRowHandlesInGroup(int groupRowHandle) { List<int> rowHandles = new List<int>(); for (int i = 0; i < grid.GetChildRowCount(groupRowHandle); i++) { int rowHandle = grid.GetChildRowHandle(groupRowHandle, i); if (grid.IsGroupRowHandle(rowHandle)) { rowHandles.AddRange(GetDataRowHandlesInGroup(rowHandle)); } else rowHandles.Add(rowHandle); } return rowHandles; }
VB.NET
Private Function GetDataRowHandles() As List(Of Integer) Dim rowHandles As List(Of Integer) = New List(Of Integer)() For i As Integer = 0 To grid.VisibleRowCount - 1 Dim rowHandle As Integer = grid.GetRowHandleByVisibleIndex(i) If grid.IsGroupRowHandle(rowHandle) Then If Not grid.IsGroupRowExpanded(rowHandle) Then rowHandles.AddRange(GetDataRowHandlesInGroup(rowHandle)) End If Else rowHandles.Add(rowHandle) End If Next Return rowHandles End Function Private Function GetDataRowHandlesInGroup(ByVal groupRowHandle As Integer) As List(Of Integer) Dim rowHandles As List(Of Integer) = New List(Of Integer)() For i As Integer = 0 To grid.GetChildRowCount(groupRowHandle) - 1 Dim rowHandle As Integer = grid.GetChildRowHandle(groupRowHandle, i) If grid.IsGroupRowHandle(rowHandle) Then rowHandles.AddRange(GetDataRowHandlesInGroup(rowHandle)) Else rowHandles.Add(rowHandle) End If Next Return rowHandles End Function
DevExpress WPF GridControl通過行句柄和列對(duì)象定義單元格,要遍歷單元格,擴(kuò)展在遍歷行部分中描述的技術(shù),遍歷或 / 集合來訪問可見單元格:
C#
for (int i = 0; i < grid.VisibleRowCount; i++) { int rowHandle = grid.GetRowHandleByVisibleIndex(i); foreach (var column in grid.Columns) { var cellValue = grid.GetCellValue(rowHandle, column); } }
VB.NET
For i As Integer = 0 To grid.VisibleRowCount - 1 Dim rowHandle As Integer = grid.GetRowHandleByVisibleIndex(i) For Each column In grid.Columns Dim cellValue = grid.GetCellValue(rowHandle, column) Next Next
要遍歷所有bands中的列,請(qǐng)使用或集合。要遍歷bands中的列,請(qǐng)從集合中獲取并使用集合屬性。
TreeListView將節(jié)點(diǎn)表示為行,您可以使用上面列出的技術(shù)來遍歷可見節(jié)點(diǎn)及其單元。
GridControl包括以下類型的詳細(xì)描述符:
注意:只有在展開主行時(shí),詳細(xì)GridControl才可用。
要遍歷詳細(xì)行,需要訪問詳細(xì)GridControl的實(shí)例。使用在遍歷行部分中描述的技術(shù),并使用 方法來檢查是否展開了主行。使用方法來獲得擴(kuò)展的GridControl詳細(xì),并遍歷它的行:
C#
Dictionary<int, List<int>> master_detail = new Dictionary<int, List<int>>(); for (int i = 0; i < masterGridControl.VisibleRowCount; i++) { int rowHandle = masterGridControl.GetRowHandleByVisibleIndex(i); List<int> details = new List<int>(); master_detail[rowHandle] = details; if (masterGridControl.IsMasterRowExpanded(rowHandle)) { var detailGrid = masterGridControl.GetDetail(rowHandle) as GridControl; for (int j = 0; j < detailGrid.VisibleRowCount; j++) { int detailRowHandle = detailGrid.GetRowHandleByVisibleIndex(j); details.Add(detailRowHandle); } } }
VB.NET
Dim master_detail As Dictionary(Of Integer, List(Of Integer)) = New Dictionary(Of Integer, List(Of Integer))() For i As Integer = 0 To masterGridControl.VisibleRowCount - 1 Dim rowHandle As Integer = masterGridControl.GetRowHandleByVisibleIndex(i) Dim details As List(Of Integer) = New List(Of Integer)() master_detail(rowHandle) = details If masterGridControl.IsMasterRowExpanded(rowHandle) Then Dim detailGrid = TryCast(masterGridControl.GetDetail(rowHandle), GridControl) For j As Integer = 0 To detailGrid.VisibleRowCount - 1 Dim detailRowHandle As Integer = detailGrid.GetRowHandleByVisibleIndex(j) details.Add(detailRowHandle) Next End If Next
使用DataViewBaseFocusedView屬性來訪問焦點(diǎn)詳細(xì)GridControl并遍歷它的行:
C#
var focusedDetail = masterView.FocusedView as TableView; if (focusedDetail != null) { List<int> rowHandles = new List<int>(); for (int i = 0; i < focusedDetail.Grid.VisibleRowCount; i++) { int rowHandle = focusedDetail.Grid.GetRowHandleByVisibleIndex(i); rowHandles.Add(rowHandle); } }
VB.NET
Dim focusedDetail = TryCast(masterView.FocusedView, TableView) If focusedDetail IsNot Nothing Then Dim rowHandles As List(Of Integer) = New List(Of Integer)() For i As Integer = 0 To focusedDetail.Grid.VisibleRowCount - 1 Dim rowHandle As Integer = focusedDetail.Grid.GetRowHandleByVisibleIndex(i) rowHandles.Add(rowHandle) Next End If
在中,您只能獲得GridControl視圖中可見的內(nèi)容。
要遍歷詳細(xì)行,需要訪問詳細(xì)GridControl的實(shí)例。使用類迭代主GridControl的可視化樹,并訪問詳細(xì)GridControl的行:
C#
var detailGrids = LayoutTreeHelper.GetVisualChildren(masterGridControl).OfType<GridControl>(); foreach(var detailGrid in detailGrids) { List<int> rowHandles = new List<int>(); for (int i = 0; i < detailGrid.VisibleRowCount; i++) { int rowHandle = detailGrid.GetRowHandleByVisibleIndex(i); rowHandles.Add(rowHandle); } }
VB.NET
Dim detailGrids = LayoutTreeHelper.GetVisualChildren(masterGridControl).OfType(Of GridControl)() For Each detailGrid In detailGrids Dim rowHandles As List(Of Integer) = New List(Of Integer)() For i As Integer = 0 To detailGrid.VisibleRowCount - 1 Dim rowHandle As Integer = detailGrid.GetRowHandleByVisibleIndex(i) rowHandles.Add(rowHandle) Next Next
在其選項(xiàng)卡中顯示不同類型的詳細(xì)信息(和),GridControl只會(huì)為選中的選項(xiàng)卡創(chuàng)建一個(gè)可視元素。要遍歷選項(xiàng)卡中的詳細(xì)行,請(qǐng)使用詳細(xì)描述符主題中描述的技術(shù)。
方法的重寫接受對(duì)象,使用這個(gè)覆蓋來獲得 的標(biāo)簽中顯示的GridControl:
XAML
<dxg:GridControl.DetailDescriptor> <dxg:TabViewDetailDescriptor> <dxg:DataControlDetailDescriptor x:Name="firstDetailDescriptor" ItemsSourceBinding="{Binding Data}"> <dxg:GridControl AutoGenerateColumns="AddNew" x:Name="detailGridControl"> <dxg:GridControl.View> <dxg:TableView x:Name="detailView"/> </dxg:GridControl.View> </dxg:GridControl> </dxg:DataControlDetailDescriptor> </dxg:TabViewDetailDescriptor> </dxg:GridControl.DetailDescriptor>
C#
Dictionary<int, List<int>> master_detail = new Dictionary<int, List<int>>(); for (int i = 0; i < masterGridControl.VisibleRowCount; i++) { int rowHandle = masterGridControl.GetRowHandleByVisibleIndex(i); List<int> details = new List<int>(); master_detail[rowHandle] = details; if (masterGridControl.IsMasterRowExpanded(rowHandle)) { var detailGrid = masterGridControl.GetDetail(rowHandle, firstDetailDescriptor) as GridControl; if (detailGrid == null) return; for (int j = 0; j < detailGrid.VisibleRowCount; j++) { int detailRowHandle = detailGrid.GetRowHandleByVisibleIndex(j); details.Add(detailRowHandle); } } }
VB.NET
Dim master_detail As Dictionary(Of Integer, List(Of Integer)) = New Dictionary(Of Integer, List(Of Integer))() For i As Integer = 0 To masterGridControl.VisibleRowCount - 1 Dim rowHandle As Integer = masterGridControl.GetRowHandleByVisibleIndex(i) Dim details As List(Of Integer) = New List(Of Integer)() master_detail(rowHandle) = details If masterGridControl.IsMasterRowExpanded(rowHandle) Then Dim detailGrid = TryCast(masterGridControl.GetDetail(rowHandle, firstDetailDescriptor), GridControl) If detailGrid Is Nothing Then Return For j As Integer = 0 To detailGrid.VisibleRowCount - 1 Dim detailRowHandle As Integer = detailGrid.GetRowHandleByVisibleIndex(j) details.Add(detailRowHandle) Next End If Next
更多產(chǎn)品資訊及授權(quán),歡迎來電咨詢:023-68661681
慧都是?家?業(yè)數(shù)字化解決?案公司,專注于軟件、?油與?業(yè)領(lǐng)域,以深?的業(yè)務(wù)理解和?業(yè)經(jīng)驗(yàn),幫助企業(yè)實(shí)現(xiàn)智能化轉(zhuǎn)型與持續(xù)競(jìng)爭(zhēng)優(yōu)勢(shì)。
慧都是DevExpress的中國(guó)區(qū)的合作伙伴,DevExpress作為用戶界面領(lǐng)域的優(yōu)秀產(chǎn)品,幫助企業(yè)高效構(gòu)建權(quán)限管理、數(shù)據(jù)可視化(如網(wǎng)格/圖表/儀表盤)、跨平臺(tái)系統(tǒng)(WinForms/ASP.NET/.NET MAUI)及行業(yè)定制解決方案,加速開發(fā)并強(qiáng)化交互體驗(yàn)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)