Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/WinForms/VB/XpoTutorials/DataCaching/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/WinForms/VB/XpoTutorials/DataCaching/DataCaching.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports DevExpress.Xpo.DB
Imports DevExpress.Data.Filtering
Imports System.Globalization
Imports DevExpress.Xpo.DB.Helpers
Imports DevExpress.Xpo.Demos

Namespace DevExpress.Xpo.Demos
    Partial Public Class DataCaching
        Inherits TutorialControl
        Public Overrides Property SetNewWhatsThisPadding() As Boolean
            Get
                Return True
            End Get
            Set(ByVal value As Boolean)
                MyBase.SetNewWhatsThisPadding() = value
            End Set
        End Property

        Public Sub New()
            InitializeComponent()
            PrepareDataLayer()
            PrepareViews()
            LoadEmployees()
        End Sub

        '<gclDataCachingMain>
        Private session As UnitOfWork
        Private dataCacheRoot As DataCacheRoot
        Private Sub CreateCachedConnection(ByVal dataStore As IDataStore)
            If dataCacheRoot Is Nothing Then
                dataCacheRoot = New DataCacheRoot(dataStore)
                dataCacheRoot.Configure(New DataCacheConfiguration(DataCacheConfigurationCaching.InList, "Employees"))
            End If
            Dim cachedDataStore As New DataCacheNode(dataCacheRoot)
            cachedDataStore.MaxCacheLatency = TimeSpan.FromSeconds(2)

            Dim dataLayer As IDataLayer = New SimpleDataLayer(cachedDataStore)
            session = New UnitOfWork(dataLayer)
        End Sub
        Private viewEmployee As XPView
        Private viewOrder As XPView
        Private Sub PrepareViews()
            viewEmployee = New XPView(session, GetType(Employees))
            viewEmployee.AddProperty("FirstName", "FirstName")
            viewEmployee.AddProperty("LastName", "LastName")
            viewEmployee.AddProperty("City", "City")
            viewOrder = New XPView(session, GetType(Orders))
            viewOrder.AddProperty("ShipName", "ShipName")
            viewOrder.AddProperty("OrderDate", "OrderDate")
            viewOrder.AddProperty("Freight", "Freight")
        End Sub
        '</gclDataCachingMain>

        Private Sub PrepareDataLayer()
            Dim DBFileName As String = DevExpress.Utils.FilesHelper.FindingFileName(Application.StartupPath, "Data\nwind.xml")
            If (Not String.IsNullOrEmpty(DBFileName)) Then
                Dim inMemory As New InMemoryDataStore(AutoCreateOption.SchemaAlreadyExists)
                inMemory.ReadXml(DBFileName)
                CreateCachedConnection(New DataStoreCounter(inMemory))
                DataStoreCounter.ClearCounter()
            End If
        End Sub

        '<sbChangeAnyEmployee>
        Private Sub UpdateAnyEmployee()
            Dim cachedDataStore As New DataCacheNode(dataCacheRoot)
            cachedDataStore.MaxCacheLatency = TimeSpan.FromSeconds(2)
            Dim dataLayer As IDataLayer = New SimpleDataLayer(cachedDataStore)
            Using uow As New UnitOfWork(dataLayer)
                Dim employee As Employees = uow.FindObject(Of Employees)(Nothing)
                If employee Is Nothing Then
                    Return
                End If
                If employee.City = "New York" Then
                    employee.City = "Chicago"
                Else
                    employee.City = "New York"
                End If
                employee.Save()
                uow.CommitChanges()
                lbSelectCount.Text = DataStoreCounter.SelectCounterValue.ToString()
            End Using
        End Sub
        '</sbChangeAnyEmployee>


        '<sbEmployees>
        Private Sub LoadEmployees()
            viewEmployee.Reload()
            If gclDataCachingMain.DataSource IsNot viewEmployee Then
                gclDataCachingMain.DataSource = viewEmployee
                gvlDataCaching.PopulateColumns()
                sbEmployees.Text = "Reload Employees"
                sbOrders.Text = "Load Orders"
            End If
            lbSelectCount.Text = DataStoreCounter.SelectCounterValue.ToString()
        End Sub
        '</sbEmployees>
        '<sbOrders>
        Private Sub LoadOrders()
            viewOrder.Reload()
            If gclDataCachingMain.DataSource IsNot viewOrder Then
                gclDataCachingMain.DataSource = viewOrder
                gvlDataCaching.PopulateColumns()
                sbEmployees.Text = "Load Employees"
                sbOrders.Text = "Reload Orders"
            End If
            lbSelectCount.Text = DataStoreCounter.SelectCounterValue.ToString()
        End Sub
        '</sbOrders>


        Private Sub sbEmployees_Click(ByVal sender As Object, ByVal e As EventArgs) Handles sbEmployees.Click
            LoadEmployees()
        End Sub

        Private Sub sbOrders_Click(ByVal sender As Object, ByVal e As EventArgs) Handles sbOrders.Click
            LoadOrders()
        End Sub

        Private Sub changeAnyEmployee_Click(ByVal sender As Object, ByVal e As EventArgs) Handles sbChangeAnyEmployee.Click
            UpdateAnyEmployee()
        End Sub
    End Class
End Namespace