Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Windows
Imports GridDemo
Imports System.Collections
Imports System.Globalization
Imports DevExpress.Data
Imports DevExpress.Xpf.DemoBase
Imports DevExpress.Xpf.Grid
Imports DevExpress.Xpf.Editors.Settings
Imports DevExpress.Xpf.Editors
Imports System.Windows.Controls
Imports System.Data
Namespace GridDemo
Public NotInheritable Class SalesByYearData
Private Sub New()
End Sub
Public Shared Function GetColumnType(ByVal fieldName As String) As Type
Return If(fieldName.Contains("Date"), GetType(DateTime), GetType(Integer))
End Function
Public Shared Function GetSalesByYearData(Optional ByVal byMonthReport As Boolean = False) As IList
Dim columns As New List(Of String)()
columns.Add("Date")
If byMonthReport Then
columns.Add("DateMonth")
End If
For Each row As DataRow In NWindData.Employees.Table.Rows
Dim name As String = CStr(row("FirstName")) & " " & CStr(row("LastName"))
If (Not columns.Contains(name)) Then
columns.Add(name)
End If
Next row
Dim table As New DataTable()
For Each employe As String In columns
table.Columns.Add(New DataColumn(employe) With {.DataType = GetColumnType(employe)})
Next employe
Dim random As New Random()
For yearIndex As Integer = 10 To 1 Step -1
Dim year As Integer = DateTime.Now.Year - yearIndex
For month As Integer = 1 To 12
Dim daysCount As Integer = If(byMonthReport, DateTime.DaysInMonth(year, month), 1)
For day As Integer = 1 To daysCount
Dim row As DataRow = table.NewRow()
row("Date") = New DateTime(year, month, day)
Dim startColumnIndex As Integer = 1
If byMonthReport Then
row("DateMonth") = row("Date")
startColumnIndex += 1
End If
For columnIndex As Integer = startColumnIndex To columns.Count - 1
row(columns(columnIndex)) = random.Next(30000 \ daysCount)
Next columnIndex
table.Rows.Add(row)
Next day
Next month
Next yearIndex
Return table.DefaultView
End Function
End Class
Public Class SalesByYearDataColumnTemplateSelector
Inherits DataTemplateSelector
Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
Dim context As ColumnGeneratorItemContext = CType(item, ColumnGeneratorItemContext)
Dim grid As GridControl = CType(container, GridControl)
Return CType(grid.Resources(If(context.PropertyDescriptor.Name = "Date", "DateColumnTemplate", "EmployeeColumnTemplate")), DataTemplate)
End Function
End Class
End Namespace