Cells display summaries calculated against data field(s) for a subset of the records in the Pivot Grid‘s data source. All records from this subset have matching values in a column field(s) and row field(s). These values are identified by column and row headers.
To get the underlying records for an indivisual cell, use the ASPxPivotGrid.CreateDrillDownDataSource method.
Consider the following ASPxPivotGrid control:
For the top-leftmost cell ($1,500.00), the ASPxPivotGrid.CreateDrillDownDataSource method will return the records from the data source which have:
- the value “Bon app’” in the ‘Customer’ field
- the value “Carnarvon Tigers” in the ‘Product Name’ field
- the 1995 value in the ‘Year’ field
For the cell ($2,435.00) at the intersection of the first column and fourth row, the ASPxPivotGrid.CreateDrillDownDataSource method will return the records which have:
- the value “Bon app’” in the ‘Customer’ field
- the 1995 value in the ‘Year’ field
Example: How to Obtain Underlying Data
The ASPxPivotGrid includes the drill-down capability, which enables you to retrieve a list of records that were used to calculate a particular summary.To obtain drill-down data, use the pivot grid's CreateDrillDownDataSource method. Its parameters completely identify a summary cell.In this example, an end-user can view records from the control's underlying data source, associated with a summary cell, by clicking on it. The obtained data is displayed by the ASPxGridView within a popup window.
View Example
using System;
using DevExpress.Web.ASPxGridView;
namespace DisplayUnderlyingRecords {
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
string columnIndexValue = ColumnIndex.Value,
rowIndexValue = RowIndex.Value;
if (ASPxGridView1.IsCallback &&
!string.IsNullOrEmpty(columnIndexValue) && !string.IsNullOrEmpty(rowIndexValue))
{
BindGridView(columnIndexValue, rowIndexValue);
ASPxGridView1.JSProperties.Add("cpShowDrillDownWindow", false);
}
}
protected void ASPxGridView1_CustomCallback(object sender,
ASPxGridViewCustomCallbackEventArgs e) {
if (e.Parameters == "D")
{
ASPxGridView1.PageIndex = 0;
ASPxGridView1.JSProperties["cpShowDrillDownWindow"] = true;
}
}
protected void BindGridView(string columnIndex, string rowIndex) {
ASPxGridView1.DataSource =
ASPxPivotGrid1.CreateDrillDownDataSource(Int32.Parse(columnIndex),
Int32.Parse(rowIndex));
ASPxGridView1.DataBind();
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="DisplayUnderlyingRecords._Default" %>
<%@ Register Assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxGridView"
TagPrefix="dxwgv" %>
<%@ Register Assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxPopupControl"
TagPrefix="dxpc" %>
<%@ Register assembly="DevExpress.Web.ASPxPivotGrid.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
namespace="DevExpress.Web.ASPxPivotGrid"
tagprefix="dxwpg" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
namespace="DevExpress.Web.ASPxEditors"
tagprefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<input runat="server" id="ColumnIndex" type="hidden" enableviewstate="true" />
<input runat="server" id="RowIndex" type="hidden" enableviewstate="true" />
<div>
<dxwpg:ASPxPivotGrid ID="ASPxPivotGrid1" runat="server"
DataSourceID="AccessDataSource1"
ClientInstanceName="PivotGrid" ClientIDMode="AutoID">
<Styles>
<CellStyle Cursor="pointer">
</CellStyle>
</Styles>
<Fields>
<dxwpg:PivotGridField Area="RowArea" AreaIndex="0"
Caption="Customer" FieldName="CompanyName"
ID="fieldCompanyName">
</dxwpg:PivotGridField>
<dxwpg:PivotGridField Area="ColumnArea" AreaIndex="0"
Caption="Year" FieldName="OrderDate"
UnboundFieldName="Year"
GroupInterval="DateYear"
ID="fieldOrderDate">
</dxwpg:PivotGridField>
<dxwpg:PivotGridField Area="DataArea" AreaIndex="0"
FieldName="ProductAmount"
Caption="Product Amount"
ID="fieldProductAmount">
</dxwpg:PivotGridField>
<dxwpg:PivotGridField Area="RowArea" AreaIndex="1"
Caption="Products" FieldName="ProductName"
ID="fieldProductName">
</dxwpg:PivotGridField>
</Fields>
<ClientSideEvents CellClick="function(s, e) {
var columnIndex = document.getElementById('ColumnIndex'),
rowIndex = document.getElementById('RowIndex');
columnIndex.value = e.ColumnIndex;
rowIndex.value = e.RowIndex;
GridView.PerformCallback('D');
}" />
<OptionsView ShowFilterHeaders="False" />
</dxwpg:ASPxPivotGrid>
<dxpc:ASPxPopupControl ID="ASPxPopupControl1" runat="server"
Left="200" Top="200" CloseAction="CloseButton"
ClientInstanceName="DrillDownWindow"
HeaderText="Drill Down Window"
Width="153px" Height="1px"
AllowDragging="True">
<ContentCollection>
<dxpc:PopupControlContentControl runat="server">
<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server"
OnCustomCallback="ASPxGridView1_CustomCallback"
ClientInstanceName="GridView"
AutoGenerateColumns="True">
<ClientSideEvents EndCallback="function(s, e) {
if( s.cpShowDrillDownWindow )
DrillDownWindow.ShowAtPos ( PivotGrid.GetMainElement().clientLeft,
PivotGrid.GetMainElement().clientTop );
}" />
<SettingsLoadingPanel Mode="ShowOnStatusBar" />
</dxwgv:ASPxGridView>
</dxpc:PopupControlContentControl>
</ContentCollection>
</dxpc:ASPxPopupControl>
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/nwind.mdb"
SelectCommand="SELECT * FROM [CustomerReports]"
DataSourceMode="DataReader" />
</div>
</form>
</body>
</html>
<%@ Page Language="vb" AutoEventWireup="true" CodeBehind="Default.aspx.vb"
Inherits="DisplayUnderlyingRecords._Default" %>
<%@ Register Assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxGridView"
TagPrefix="dxwgv" %>
<%@ Register Assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxPopupControl"
TagPrefix="dxpc" %>
<%@ Register assembly="DevExpress.Web.ASPxPivotGrid.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
namespace="DevExpress.Web.ASPxPivotGrid"
tagprefix="dxwpg" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
namespace="DevExpress.Web.ASPxEditors"
tagprefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<input runat="server" id="ColumnIndex" type="hidden" enableviewstate="true" />
<input runat="server" id="RowIndex" type="hidden" enableviewstate="true" />
<div>
<dxwpg:ASPxPivotGrid ID="ASPxPivotGrid1" runat="server"
DataSourceID="AccessDataSource1"
ClientInstanceName="PivotGrid" ClientIDMode="AutoID">
<Styles>
<CellStyle Cursor="pointer">
</CellStyle>
</Styles>
<Fields>
<dxwpg:PivotGridField Area="RowArea" AreaIndex="0"
Caption="Customer" FieldName="CompanyName"
ID="fieldCompanyName">
</dxwpg:PivotGridField>
<dxwpg:PivotGridField Area="ColumnArea" AreaIndex="0"
Caption="Year" FieldName="OrderDate"
UnboundFieldName="Year"
GroupInterval="DateYear"
ID="fieldOrderDate">
</dxwpg:PivotGridField>
<dxwpg:PivotGridField Area="DataArea" AreaIndex="0"
FieldName="ProductAmount"
Caption="Product Amount"
ID="fieldProductAmount">
</dxwpg:PivotGridField>
<dxwpg:PivotGridField Area="RowArea" AreaIndex="1"
Caption="Products" FieldName="ProductName"
ID="fieldProductName">
</dxwpg:PivotGridField>
</Fields>
<ClientSideEvents CellClick="function(s, e) {
var columnIndex = document.getElementById('ColumnIndex'),
rowIndex = document.getElementById('RowIndex');
columnIndex.value = e.ColumnIndex;
rowIndex.value = e.RowIndex;
GridView.PerformCallback('D');
}" />
<OptionsView ShowFilterHeaders="False" />
</dxwpg:ASPxPivotGrid>
<dxpc:ASPxPopupControl ID="ASPxPopupControl1" runat="server"
Left="200" Top="200" CloseAction="CloseButton"
ClientInstanceName="DrillDownWindow"
HeaderText="Drill Down Window"
Width="153px" Height="1px"
AllowDragging="True">
<ContentCollection>
<dxpc:PopupControlContentControl runat="server">
<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server"
OnCustomCallback="ASPxGridView1_CustomCallback"
ClientInstanceName="GridView"
AutoGenerateColumns="True">
<ClientSideEvents EndCallback="function(s, e) {
if( s.cpShowDrillDownWindow )
DrillDownWindow.ShowAtPos ( PivotGrid.GetMainElement().clientLeft,
PivotGrid.GetMainElement().clientTop );
}" />
<SettingsLoadingPanel Mode="ShowOnStatusBar" />
</dxwgv:ASPxGridView>
</dxpc:PopupControlContentControl>
</ContentCollection>
</dxpc:ASPxPopupControl>
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/nwind.mdb"
SelectCommand="SELECT * FROM [CustomerReports]"
DataSourceMode="DataReader" />
</div>
</form>
</body>
</html>
Imports System
Imports DevExpress.Web.ASPxGridView
Namespace DisplayUnderlyingRecords
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim columnIndexValue As String = ColumnIndex.Value, rowIndexValue As String = RowIndex.Value
If ASPxGridView1.IsCallback AndAlso (Not String.IsNullOrEmpty(columnIndexValue)) _
AndAlso (Not String.IsNullOrEmpty(rowIndexValue)) Then
BindGridView(columnIndexValue, rowIndexValue)
ASPxGridView1.JSProperties.Add("cpShowDrillDownWindow", False)
End If
End Sub
Protected Sub ASPxGridView1_CustomCallback(ByVal sender As Object, _
ByVal e As ASPxGridViewCustomCallbackEventArgs)
If e.Parameters = "D" Then
ASPxGridView1.PageIndex = 0
ASPxGridView1.JSProperties("cpShowDrillDownWindow") = True
End If
End Sub
Protected Sub BindGridView(ByVal columnIndex As String, ByVal rowIndex As String)
ASPxGridView1.DataSource =
ASPxPivotGrid1.CreateDrillDownDataSource(Int32.Parse(columnIndex), _
Int32.Parse(rowIndex))
ASPxGridView1.DataBind()
End Sub
End Class
End Namespace