Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports DevExpress.Utils
Imports DevExpress.XtraEditors
Imports DevExpress.XtraPivotGrid.Demos.Helpers
Imports System
Imports System.Windows.Forms
Namespace DevExpress.XtraPivotGrid.Demos.Modules
Partial Public Class AsynchronousMode
Inherits TutorialControl
Private isDataBaseGeneratorRunned As Boolean = False
Protected Overrides ReadOnly Property HideCustFormWhenSwitchDemo() As Boolean
Get
Return False
End Get
End Property
Public Sub New()
CreateWaitDialog()
InitializeComponent()
TutorialInfo.WhatsThisCodeFile = "VB\PivotGridMainDemo\Modules\AsyncMode.vb"
TutorialInfo.WhatsThisXMLFile = "AsyncMode.xml"
rgDataSources.SelectedIndex = 0
ServerParameters.LoadParameters()
End Sub
Private Sub AsynchronousMode_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
pivotGridControl.FieldsCustomization(splitContainerControl1.Panel2)
UpdateGenerateDataSourceButtonPosition()
End Sub
Private Sub AsynchronousMode_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
UpdateGenerateDataSourceButtonPosition()
End Sub
Private Sub splitContainerControl1_SplitterMoved(ByVal sender As Object, ByVal e As EventArgs) Handles splitContainerControl1.SplitterMoved
UpdateGenerateDataSourceButtonPosition()
End Sub
Private Sub UpdateGenerateDataSourceButtonPosition()
btnGenerateDataSource.Left = Math.Max(splitContainerControl1.SplitterBounds.Left - btnGenerateDataSource.Width, rgDataSources.Right + rgDataSources.Margin.Right)
End Sub
'<btnGenerateDataSource>
Private Sub btnGenerateDataSource_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGenerateDataSource.Click
RunDBGenerator("Return to Demo")
End Sub
'</btnGenerateDataSource>
'<rgDataSources>
Private Sub rgDataSources_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles rgDataSources.SelectedIndexChanged
DisableControls()
Select Case rgDataSources.SelectedIndex
Case 0
Initialize(InitializerDataSource.OlapCube)
Case 1
Initialize(InitializerDataSource.TableDataSource)
End Select
End Sub
'</rgDataSources>
'<btnGenerateDataSource>
Private Sub RunDBGenerator(ByVal demoString As String)
Using formConnector As New frmSQLConnector(demoString)
formConnector.ShowDialog()
If rgDataSources.SelectedIndex = 1 Then
rgDataSources.Enabled = False
isDataBaseGeneratorRunned = True
Initialize(InitializerDataSource.TableDataSource)
End If
End Using
End Sub
'</btnGenerateDataSource>
Private Sub Initialize(ByVal dataSourceType As InitializerDataSource)
AsynchronousPivotInitializer.Initialize(pivotGridControl, AddressOf AsyncInitializationCompleted, dataSourceType)
End Sub
Private Sub DisableControls()
rgDataSources.Enabled = False
btnGenerateDataSource.Enabled = False
End Sub
Private Sub EnableControls()
rgDataSources.Enabled = True
btnGenerateDataSource.Enabled = True
End Sub
Private Sub AsyncInitializationCompleted(ByVal result As AsyncOperationResult)
EnableControls()
If result Is Nothing Then
If (Not isDataBaseGeneratorRunned) Then
RunDBGenerator("Start Demo")
End If
pivotGridControl.Enabled = False
labelError.Text = If(rgDataSources.SelectedIndex = 0, AsynchronousPivotInitializer.OlapError, AsynchronousPivotInitializer.TableError)
panelError.Visible = True
Else
pivotGridControl.Enabled = True
panelError.Visible = False
End If
End Sub
'<pivotGridControl>
Private Sub pivotGridControl1_CellDoubleClick(ByVal sender As Object, ByVal e As PivotCellEventArgs) Handles pivotGridControl.CellDoubleClick
Dim showDrillDown As AsyncCompletedHandler = Function(result) AnonymousMethod1(result)
pivotGridControl.CreateDrillDownDataSourceAsync(e.ColumnIndex, e.RowIndex, showDrillDown)
End Sub
Private Function AnonymousMethod1(ByVal result As AsyncOperationResult) As Boolean
Try
ShowDrillDown(CType(result.Value, PivotDrillDownDataSource))
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Return True
End Function
Private Sub ShowDrillDown(ByVal drillDownDataSource As PivotDrillDownDataSource)
If drillDownDataSource.RowCount = 0 Then
'Also shows for calculated datafields in this demo
MessageBox.Show("DrillDown doesn't contains results")
Return
End If
Dim form As New XtraForm()
form.Text = String.Format("Drill Down Results: {0} Rows", drillDownDataSource.RowCount)
form.Width = 520
form.Height = 300
form.StartPosition = FormStartPosition.CenterParent
Dim grid As New DataGridView()
grid.Parent = form
AddHandler grid.DataBindingComplete, AddressOf grid_DataBindingComplete
grid.Dock = DockStyle.Fill
grid.DataSource = drillDownDataSource
form.Icon = ResourceImageHelper.CreateIconFromResources("DevExpress.XtraPivotGrid.Demos.PivotGridMainDemo.ico", GetType(AsynchronousMode).Assembly)
form.ShowDialog()
form.Dispose()
End Sub
'</pivotGridControl>
Private Sub grid_DataBindingComplete(ByVal sender As Object, ByVal e As DataGridViewBindingCompleteEventArgs)
Dim grid As DataGridView = CType(sender, DataGridView)
For i As Integer = 0 To grid.ColumnCount - 1
Dim column As DataGridViewColumn = grid.Columns(i)
column.HeaderText = GetHeaderText(column.Name)
Next i
End Sub
Private Function GetHeaderText(ByVal drilldownColumnName As String) As String
For i As Integer = 0 To pivotGridControl.Fields.Count - 1
Dim field As PivotGridField = pivotGridControl.Fields(i)
Dim fieldDrillDownColumnName As String = If(pivotGridControl.IsOLAPDataSource, field.OLAPDrillDownColumnName, field.ExpressionFieldName)
If fieldDrillDownColumnName = drilldownColumnName Then
Return If((Not String.IsNullOrEmpty(field.Caption)), field.Caption, fieldDrillDownColumnName)
End If
Next i
Return drilldownColumnName
End Function
Private Sub pivotGridControl_AsyncOperationCompleted(ByVal sender As Object, ByVal e As EventArgs) Handles pivotGridControl.AsyncOperationCompleted
EnableControls()
End Sub
Private Sub pivotGridControl_AsyncOperationStarting(ByVal sender As Object, ByVal e As EventArgs) Handles pivotGridControl.AsyncOperationStarting
DisableControls()
End Sub
End Class
End Namespace