DevExpress报表必须在数据源级别使用Parameters筛选BindingSource
本文关键字:Parameters 筛选 BindingSource 报表 数据源 DevExpress | 更新日期: 2023-09-27 18:25:45
我正在尝试将XtraReport
绑定到BindingSource
(而不是Dataset
),并希望在数据源中的值使用报表参数到达报表之前对其进行筛选。
我已经在报表设计器中声明了参数和bindingsource。所以我已经设置好了字段和所有内容。
根据这篇文章,我现在可以在Windows窗体的Load
事件中加载集合。但我不希望这样。
换句话说,报告不应加载自定义StoreCollection
(自定义Store
类型的List<T>
)中的所有行,而应仅加载由参数确定的行。
我该如何做到这一点?
注意:我知道BindingSource
有一个Filter
属性,但我不确定如何将参数传递给它(参数用于从数据库中检索数据,并返回自定义类型列表)
谢谢。
在数据进入报告之前,我会使用LINQ来选择数据。我的代码在VB.net中,但可以很容易地翻译:
1-创建一个数据对象-它将包含我们的数据
Public Class Animal
Public name As String
Public livesYears As Integer
Public location As String
End Class
2-创建XtraReport1。将一个BindingSource
放到设计器中,并将其DataSource
设置为Animal
。如果Animal
没有显示在向导生成的列表中,则需要重新生成解决方案。将几个字段放到设计器上…'name等,这样报告就会有内容……报告!
3-创建子以填充列表
Private Function createAnimals() As List(Of Animal)
Dim allAnimals As New List(Of Animal)
allAnimals.Add(New Animal With {.name = "Snake", .livesYears = "12", .location = "Africa"})
allAnimals.Add(New Animal With {.name = "Dog", .livesYears = "17", .location = "England"})
allAnimals.Add(New Animal With {.name = "Cat", .livesYears = "14", .location = "Egypt"})
allAnimals.Add(New Animal With {.name = "Hedgehog", .livesYears = "4", .location = "England"})
allAnimals.Add(New Animal With {.name = "Dragon", .livesYears = "350", .location = "Canada"})
allAnimals.Add(New Animal With {.name = "Bat", .livesYears = "28", .location = "Scotland"})
Return allAnimals
End Function
4-在Form Load 中创建报告实例
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
'create our list of animals (could be a for loop that adds each dataset row to the list of Animal)
Dim allAnimals As List(Of Animal) = createAnimals()
'select just the Animals that we want
Dim justTheAnimalsIWant = (From ani In allAnimals
Where ani.location = "England"
Select ani).ToList
'create instance of the report
Dim report As New XtraReport1
'set the datasource to justTheAnimalsIWant
report.DataSource = justTheAnimalsIWant
Dim printTool As ReportPrintTool = New ReportPrintTool(report)
printTool.ShowPreview()
End Sub
上面的例子没有使用数据集,而是使用了Animal
对象的列表。要填充我们的Animal
对象列表,可以使用for循环遍历数据行并添加到Animal
对象列表中。然后使用LINQ选择您想要的内容,就像使用justTheAnimalsIWant
一样。简单。