将详细报告绑定到具有存储在字典中的属性的 class 模型(VB.NET,Devexpress)
Bind a detail report to a class model with properties stored in a Dictionary (VB.NET, Devexpress)
我正在尝试 Devexpress 中的示例
Dim binding As New XRBinding("Text", dsProducts1, "Products.UnitPrice")
但是我的模型没有在 class 中明确写入它们的属性。它需要一个方法 GetProperty("column_name_here") 来获取它的数据。我想知道 XRBinding 的第三个参数是否可以是一个方法?喜欢:
Dim binding As New XRBinding("Text", dsProducts1, product.GetProperty("name"))
附加信息:
我的所有模型 classes 都扩展了这个 Dao
class,它负责在数据库中获取数据。 Dao
class 有一个受保护的变量作为字典(字符串,对象)来存储数据库中的值(键=列名,值=列行值)。
现在当我想在数据库中获取一些东西时,我只调用
Dim user As New User // this class extends the Dao class
Dim userId = user.GetProperty("id") // Method to get the value from Dictionary, first parameter is the Dictionary key or column name from the DB
我这样做是为了不必创建每个模型 class 并设置那个 class 的属性,因为它有点麻烦。
似乎无法绑定到某些方法。我建议你看看 ExpandoObject
动态 class。 class 的成员可以在运行时添加。此 class 实现 IDictionary(Of String, Object)
接口,您可以使用该接口从 Dictionary(Of String, Object)
.
生成属性
示例如下:
基础 Dao
class 实施示例 Dictionary(Of String, Object)
属性:
Public Class Dao
Private _values As Dictionary(Of String, Object)
Public Sub New()
_values = New Dictionary(Of String, Object)
End Sub
Public Overridable Sub Fill(index As Integer)
_values.Clear()
_values.Add("ID", index)
_values.Add("Product", "Banana " & index)
_values.Add("Price", 123.45 + index)
End Sub
Protected ReadOnly Property Values As Dictionary(Of String, Object)
Get
Return _values
End Get
End Property
End Class
Dao
class 后代的示例 DynamicValues
属性 其中 returns ExpandoObject
基于 Dictionary(Of String, Object)
(您必须省略 属性):
的类型
Public Class DynamicDao
Inherits Dao
Private _dynamicValues As ExpandoObject
Public Overrides Sub Fill(index As Integer)
MyBase.Fill(index)
_dynamicValues = New ExpandoObject()
Dim keyValues = DirectCast(_dynamicValues, IDictionary(Of String, Object))
For Each pair In Values
keyValues.Add(New KeyValuePair(Of String, Object)(pair.Key, pair.Value))
Next
End Sub
Public ReadOnly Property DynamicValues ' <= There is no type. In hint is displayed «As Object».
Get
Return _dynamicValues
End Get
End Property
End Class
DynamicDao
class 在 XtraReport
中的用法:
Dim list = New List(Of DynamicDao)
For index% = 0 To 9
Dim dao = New DynamicDao()
dao.Fill(index%)
list.Add(dao)
Next
Dim labelID = New XRLabel()
labelID.DataBindings.Add(New XRBinding("Text", Nothing, "DynamicValues.ID"))
Dim labelProduct = New XRLabel()
labelProduct.DataBindings.Add(New XRBinding("Text", Nothing, "DynamicValues.Product"))
labelProduct.LeftF = 50
Dim labelPrice = New XRLabel()
labelPrice.DataBindings.Add(New XRBinding("Text", Nothing, "DynamicValues.Price"))
labelPrice.LeftF = 150
Dim detail = New DetailBand()
detail.Controls.Add(labelID)
detail.Controls.Add(labelProduct)
detail.Controls.Add(labelPrice)
Dim report = New XtraReport()
report.Bands.Add(detail)
report.DataSource = list
report.ShowRibbonPreview()
我正在尝试 Devexpress 中的示例
Dim binding As New XRBinding("Text", dsProducts1, "Products.UnitPrice")
但是我的模型没有在 class 中明确写入它们的属性。它需要一个方法 GetProperty("column_name_here") 来获取它的数据。我想知道 XRBinding 的第三个参数是否可以是一个方法?喜欢:
Dim binding As New XRBinding("Text", dsProducts1, product.GetProperty("name"))
附加信息:
我的所有模型 classes 都扩展了这个 Dao
class,它负责在数据库中获取数据。 Dao
class 有一个受保护的变量作为字典(字符串,对象)来存储数据库中的值(键=列名,值=列行值)。
现在当我想在数据库中获取一些东西时,我只调用
Dim user As New User // this class extends the Dao class
Dim userId = user.GetProperty("id") // Method to get the value from Dictionary, first parameter is the Dictionary key or column name from the DB
我这样做是为了不必创建每个模型 class 并设置那个 class 的属性,因为它有点麻烦。
似乎无法绑定到某些方法。我建议你看看 ExpandoObject
动态 class。 class 的成员可以在运行时添加。此 class 实现 IDictionary(Of String, Object)
接口,您可以使用该接口从 Dictionary(Of String, Object)
.
示例如下:
基础 Dao
class 实施示例 Dictionary(Of String, Object)
属性:
Public Class Dao
Private _values As Dictionary(Of String, Object)
Public Sub New()
_values = New Dictionary(Of String, Object)
End Sub
Public Overridable Sub Fill(index As Integer)
_values.Clear()
_values.Add("ID", index)
_values.Add("Product", "Banana " & index)
_values.Add("Price", 123.45 + index)
End Sub
Protected ReadOnly Property Values As Dictionary(Of String, Object)
Get
Return _values
End Get
End Property
End Class
Dao
class 后代的示例 DynamicValues
属性 其中 returns ExpandoObject
基于 Dictionary(Of String, Object)
(您必须省略 属性):
Public Class DynamicDao
Inherits Dao
Private _dynamicValues As ExpandoObject
Public Overrides Sub Fill(index As Integer)
MyBase.Fill(index)
_dynamicValues = New ExpandoObject()
Dim keyValues = DirectCast(_dynamicValues, IDictionary(Of String, Object))
For Each pair In Values
keyValues.Add(New KeyValuePair(Of String, Object)(pair.Key, pair.Value))
Next
End Sub
Public ReadOnly Property DynamicValues ' <= There is no type. In hint is displayed «As Object».
Get
Return _dynamicValues
End Get
End Property
End Class
DynamicDao
class 在 XtraReport
中的用法:
Dim list = New List(Of DynamicDao)
For index% = 0 To 9
Dim dao = New DynamicDao()
dao.Fill(index%)
list.Add(dao)
Next
Dim labelID = New XRLabel()
labelID.DataBindings.Add(New XRBinding("Text", Nothing, "DynamicValues.ID"))
Dim labelProduct = New XRLabel()
labelProduct.DataBindings.Add(New XRBinding("Text", Nothing, "DynamicValues.Product"))
labelProduct.LeftF = 50
Dim labelPrice = New XRLabel()
labelPrice.DataBindings.Add(New XRBinding("Text", Nothing, "DynamicValues.Price"))
labelPrice.LeftF = 150
Dim detail = New DetailBand()
detail.Controls.Add(labelID)
detail.Controls.Add(labelProduct)
detail.Controls.Add(labelPrice)
Dim report = New XtraReport()
report.Bands.Add(detail)
report.DataSource = list
report.ShowRibbonPreview()