1

我想在搜索屏幕上的搜索框所在的位置放置一个下拉列表,并使每个条目与不同的查询相关联。这是用于我的业务中使用的数据库,我们目前有太多屏幕,例如:

  • 所有设备
  • 新设备
  • 可用设备
  • 出售设备
  • 未付费设备
  • 未付佣金

我正在使用 2012 RC 的 Lightswitch V2

4

3 回答 3

3

首先单击添加数据项并添加一个字符串类型的本地属性。为了讨论起见,调用它SearchType。在“SearchType选择列表”的“属性”窗口中。使用您在上面列出的值(即所有设备、新设备等)填充选择列表。将它拖到控件树上,它将成为一个 AutoCompleteBox。

右键单击我要调用的Equipment表,然后单击添加查询。给它起一个名字,比如EquipmentSearch. 设置类似于 Yann 链接的第 2 步中所见的查询:

在此处输入图像描述

添加参数但不添加过滤器。而不是TownId让我们调用它SearchParam并将其设为 String 类型。

返回屏幕设计器,使用添加数据项将EquipmentSearch查询添加到屏幕。将其拖到树上,使其成为网格视图。

单击EquipmentSeach左侧列表以使其展开。然后单击SearchParam并在其属性窗口中,单击参数绑定下方的框并选择SearchType

EquipmentSearch再次在查询设计器中打开。在查询设计器的右上角,单击 Write Code 旁边的箭头并选择EqupimentSearch_PreprocessQuery

现在添加类似于以下的代码:

VB.NET

    Private Sub EquipmentSearch_PreprocessQuery(SearchParam As System.Nullable(Of String), ByRef query As System.Linq.IQueryable(Of LightSwitchApplication.Equipment))
        Select Case SearchParam
            Case "New Equipment"
                query = From es In query
                        Where es.EquipStatus = "New"
                        Select es
            Case "Available Equipment"
                query = From es In query
                        Where es.EquipStatus = "Available"
                        Select es
            Case "Sold Equipment"
                query = From es In query
                        Where es.EquipStatus = "Sold"
                        Select es
            Case "Unpaid Equipment"
                query = From es In query
                        Where es.EquipStatus = "Unpaid"
                        Select es
            Case "Unpaid Commission"
                query = From es In query
                        Where es.EquipCommission = "Unpaid"
                        Select es
        End Select
    End Sub

C#

private void EquipmentSearch_PreprocessQuery(System.Nullable[] SearchParam, void Of, void String) {
    ((System.Linq.IQueryable[])(query));
    Of;
    LightSwitchApplication.Equipment;

    switch (SearchParam) {
        case "New Equipment":
            query = From es In query
                    Where es.EquipStatus = "New"
                    Select es
            break;
        case "Available Equipment":
            query = From es In query
                    Where es.EquipStatus = "Available"
                    Select es
            break;
        case "Sold Equipment":
            query = From es In query
                    Where es.EquipStatus = "Sold"
                    Select es
            break;
        case "Unpaid Equipment":
            query = From es In query
                    Where es.EquipStatus = "Unpaid"
                    Select es
            break;
        case "Unpaid Commission":
            query = From es In query
                    Where es.EquipCommission = "Unpaid"
                    Select es
            break;
    }

让“所有设备”和所有其他设备都失败。如果它失败,那么网格视图将显示整个表的完整的、未过滤的视图,这是我假设您在“所有设备”的情况下想要的。在其他情况下,使用 LINQ 自定义返回的结果。

于 2012-07-16T17:43:46.347 回答
1

您可以将多个数据网格放在同一个屏幕上,方法是向屏幕添加屏幕查询属性,然后将它们从设计器的左侧拖到屏幕控制树上。

你问的是这个吗?

编辑:

让每个条目与不同的查询相关联”让我相信您希望在一个屏幕上显示多个实体。

这有帮助吗?创建 ComboBox 过滤的搜索屏幕

于 2012-07-16T03:21:24.433 回答
1

您还可以在 Lightswitch 中执行的操作是在分配给查询的屏幕中定义一个额外的属性,该属性由屏幕上显示的属性决定。

在查询编辑器中,像往常一样将属性分配给表中的字段。

现在使用用于显示的其他属性,选择 Property_Changed 事件,并使用使用的 switch case(如在 embedded.kyle 的示例中)根据它们的选择分配查询中使用的属性。然后,您可以在屏幕的创建事件中分配默认值。

这将代码保留在预处理查询之外和屏幕代码中。这可能是一种偏好,但我喜欢只在需要时使用预处理查询,例如交叉引用未由单独的表绑定的表来处理它。

于 2013-08-28T14:55:31.760 回答