The event handler receives an argument of type ViewOperationEventArgs containing data related to this event.
The following
ViewOperationEventArgs properties provide information specific to this event.
Property |
Description |
View |
Gets the currently processed View. |
Detail clones are not stored in memory permanently. They are created and destroyed dynamically. When expanding a master row, a detail clone is created automatically to represent the detail data that becomes visible. If a master row has several details, other detail clones are created only when switching to them (making them visible). When collapsing a master row, all associated details are automatically destroyed.
When a detail clone is created, the grid control adds it to the Views collection and raises the ViewRegistered
event. The new detail View can be accessed via the event's ViewOperationEventArgs.View parameter.
C# |
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
private void gridControl1_ViewRegistered(object sender, DevExpress.XtraGrid.ViewOperationEventArgs e) {
GridView view = (GridView)e.View;
foreach (GridColumn col in view.Columns) {
if (col.FieldName == "Discount")
col.Caption = "Percent";
}
}
|
VB |
Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraGrid.Views.Grid
Private Sub gridControl1_ViewRegistered(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.ViewOperationEventArgs) _
Handles gridControl1.ViewRegistered
Dim view As GridView = CType(e.View, GridView)
For Each col As GridColumn In view.Columns
If col.FieldName = "Discount" Then
col.Caption = "Percent"
End If
Next col
End Sub
|
Please refer to the Master-Detail Relationships topic for details.
The ViewRegistered
event may also fire for the Main View (MainView). This is the case if you subscribe to the event before the Main View has been set.

Example
The Drag-and-Drop Behavior allows you to support drag-and-drop operations between detail views in a grid control.

To allow users to move child rows between detail views, do the following:
- Attach the Behavior to the master view in the Visual Studio Designer or in code.
- Use the ViewRegistered event — to attach the Behavior to the detail view. To detach the Behavior, use the ViewRemoved event.
- Handle the DragDropEvents.DragDrop event of the Behavior attached to the master view — to move the processed child row from the source detail view to the target detail view.
The code below shows how to implement this approach. It is assumed the behavior Manager is placed to the component tray and the Behavior Manager is attached to the main view in the Visual Studio Designer.
C# |
using DevExpress.Utils.DragDrop;
using DevExpress.XtraGrid.Views.Grid;
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsSelection.MultiSelect = true;
gridControl1.DataSource = CreateDataTable();
gridControl1.ViewRegistered += GridControl1_ViewRegistered;
private void dragDropEvents1_DragDrop(object sender, DragDropEventArgs e) {
GridView masterView = e.Source as GridView;
DragDropGridEventArgs realArgs = (DragDropGridEventArgs)e;
GridView sourceView = realArgs.Source as GridView;
GridView targetView = realArgs.Target as GridView;
var view1 = gridControl1.GetViewAt(gridControl1.PointToClient(e.Location));
if(sourceView != null && targetView != null) {
var newParentId = masterView.GetRowCellValue(targetView.SourceRowHandle, "Id");
foreach(DataRowView dataRow in realArgs.DataRows) {
dataRow.Row["ParentId"] = newParentId;
}
e.Handled = true;
}
}
private void GridControl1_ViewRegistered(object sender, DevExpress.XtraGrid.ViewOperationEventArgs e) {
if(e.View.IsDetailView) {
behaviorManager1.Attach<DragDropBehavior>(e.View);
}
}
public DataTable CreateDataTable() {
masterTable = new DataTable();
masterTable.Columns.Add("Id", typeof(int));
masterTable.Columns.Add("Name");
masterTable.Columns.Add("IsActive", typeof(bool));
masterTable.Columns.Add("OrderCount", typeof(int));
masterTable.Columns.Add("RegistrationDate", typeof(DateTime));
for(int i = 0; i < 10; i++) {
masterTable.Rows.Add(i, "Name" + i, i % 2 == 0, i * 10, DateTime.Now.AddDays(i));
}
DataTable childTable = new DataTable();
childTable.Columns.Add("ParentId", typeof(int));
childTable.Columns.Add("Id", typeof(int));
childTable.Columns.Add("Name");
for(int i = 0; i < 20; i++) {
childTable.Rows.Add(i % 10, i, "Name" + i);
}
DataSet set = new DataSet();
set.Tables.Add(masterTable);
set.Tables.Add(childTable);
set.Relations.Add(masterTable.Columns["Id"], childTable.Columns["ParentId"]);
return masterTable;
}
|
VB |
Imports DevExpress.Utils.DragDrop
Imports DevExpress.XtraGrid.Views.Grid
gridView1.OptionsBehavior.Editable = False
gridView1.OptionsSelection.MultiSelect = True
gridControl1.DataSource = CreateDataTable()
AddHandler gridControl1.ViewRegistered, AddressOf GridControl1_ViewRegistered
Private Sub dragDropEvents1_DragDrop(ByVal sender As Object, ByVal e As DragDropEventArgs) Handles dragDropEvents1.DragDrop
Dim masterView As GridView = TryCast(e.Source, GridView)
Dim realArgs As DragDropGridEventArgs = CType(e, DragDropGridEventArgs)
Dim sourceView As GridView = TryCast(realArgs.Source, GridView)
Dim targetView As GridView = TryCast(realArgs.Target, GridView)
Dim view1 = gridControl1.GetViewAt(gridControl1.PointToClient(e.Location))
If sourceView IsNot Nothing AndAlso targetView IsNot Nothing Then
Dim newParentId = masterView.GetRowCellValue(targetView.SourceRowHandle, "Id")
For Each dataRow As DataRowView In realArgs.DataRows
dataRow.Row("ParentId") = newParentId
Next dataRow
e.Handled = True
End If
End Sub
Private Sub GridControl1_ViewRegistered(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.ViewOperationEventArgs)
If e.View.IsDetailView Then
behaviorManager1.Attach(Of DragDropBehavior)(e.View)
End If
End Sub
Public Function CreateDataTable() As DataTable
masterTable = New DataTable()
masterTable.Columns.Add("Id", GetType(Integer))
masterTable.Columns.Add("Name")
masterTable.Columns.Add("IsActive", GetType(Boolean))
masterTable.Columns.Add("OrderCount", GetType(Integer))
masterTable.Columns.Add("RegistrationDate", GetType(Date))
For i As Integer = 0 To 9
masterTable.Rows.Add(i, "Name" & i, i Mod 2 = 0, i * 10, Date.Now.AddDays(i))
Next i
Dim childTable As New DataTable()
childTable.Columns.Add("ParentId", GetType(Integer))
childTable.Columns.Add("Id", GetType(Integer))
childTable.Columns.Add("Name")
For i As Integer = 0 To 19
childTable.Rows.Add(i Mod 10, i, "Name" & i)
Next i
Dim dataSet As New DataSet()
dataSet.Tables.Add(masterTable)
dataSet.Tables.Add(childTable)
dataSet.Relations.Add(masterTable.Columns("Id"), childTable.Columns("ParentId"))
Return masterTable
End Function
|