翻譯|使用教程|編輯:龔雪|2025-08-13 11:22:54.967|閱讀 107 次
概述:本文主要介紹DevExpress WPF Grid控件如何在網格視圖數據布局中遍歷代碼中的行和單元格,歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數據為中心的商業智能產品,都能通過DevExpress WPF控件來實現。
在本文中您將學習到DevExpress WPF Grid控件如何在網格視圖數據布局中遍歷代碼中的行和單元格,歡迎下載最新版組件體驗!
DevExpress技術交流群11:749942875 歡迎一起進群討論
本文演示如何逐個訪問數據項。
DevExpress WPF GridControl通過句柄或可見索引標識數據行,屬性返回可見組和數據行的總數。為了遍歷行,使用一個從0到屬性值的計數器。在這個代碼示例中,我們使用方法來獲取行句柄:
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
屬性不考慮:
注意:當您在GridControl的底部顯示New Item Row時,屬性將其視為常規行。
要遍歷分組中的折疊行,請使用方法。此方法返回分組中當前行的計數。創建一個類似于前一個的計數器,并使用方法來獲取組中行的句柄,使用 方法檢查行是否為分組行。
下面的示例展示如何獲取視圖中所有數據行的句柄(包括折疊組中的行),除了被過濾掉的行:
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通過行句柄和列對象定義單元格,要遍歷單元格,擴展在遍歷行部分中描述的技術,遍歷或 / 集合來訪問可見單元格:
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中的列,請使用或集合。要遍歷bands中的列,請從集合中獲取并使用集合屬性。
TreeListView將節點表示為行,您可以使用上面列出的技術來遍歷可見節點及其單元。
GridControl包括以下類型的詳細描述符:
注意:只有在展開主行時,詳細GridControl才可用。
要遍歷詳細行,需要訪問詳細GridControl的實例。使用在遍歷行部分中描述的技術,并使用 方法來檢查是否展開了主行。使用方法來獲得擴展的GridControl詳細,并遍歷它的行:
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屬性來訪問焦點詳細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視圖中可見的內容。
要遍歷詳細行,需要訪問詳細GridControl的實例。使用類迭代主GridControl的可視化樹,并訪問詳細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
在其選項卡中顯示不同類型的詳細信息(和),GridControl只會為選中的選項卡創建一個可視元素。要遍歷選項卡中的詳細行,請使用詳細描述符主題中描述的技術。
方法的重寫接受對象,使用這個覆蓋來獲得 的標簽中顯示的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
更多產品資訊及授權,歡迎來電咨詢:023-68661681
慧都是?家?業數字化解決?案公司,專注于軟件、?油與?業領域,以深?的業務理解和?業經驗,幫助企業實現智能化轉型與持續競爭優勢。
慧都是DevExpress的中國區的合作伙伴,DevExpress作為用戶界面領域的優秀產品,幫助企業高效構建權限管理、數據可視化(如網格/圖表/儀表盤)、跨平臺系統(WinForms/ASP.NET/.NET MAUI)及行業定制解決方案,加速開發并強化交互體驗。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網