Lightswitch 搜索屏幕 - 选择您可以搜索的内容

Lightswitch Search screen - choosing what you can search by

我有一个搜索屏幕,显示来自 'projects' 实体的结果。其中一个字段是 link 到 'Clients' 实体,它有一个客户端名称。

我可以使用数据上方的搜索框按项目名称、日期等进行搜索,但我无法按客户名称进行搜索。我猜是因为它实际上是对一个单独实体的引用。

我怎样才能使用搜索框按客户名称搜索项目?

为了在这里解释得更清楚,是数据库布局。

Project
------
ProjName
ProjType
ProjComment
Client --------------- Client
                       -----
                       Name
                       Address

我可以按项目字段搜索,但不能按客户名称搜索。

为项目实体创建自定义查询并为您要搜索的所有项目和客户端属性添加可选参数。连接自定义查询过滤器。 为了完全控制,不要连接自定义查询过滤器,而是在代码后面过滤 PreProcess 事件。

如果您使用 HTML Client,则可以在 browse screen 与您的项目 Table 相关联。如果您查看左侧导航栏,请单击 edit query,然后在此处,您可以看到 3 个选项,Filter排序参数

Filter 应该说 Client.Name 基于你的 table 结构,第二个应该改为 "contains",第三个应该设置作为参数,最后第 4 个框是您创建要用作搜索框的新参数的地方...

您可以重命名底部的 参数 ,我总能找到最好的方法,在右下角的 属性 框中将其设置为可选。 (这意味着将显示所有数据,而不是在搜索之前不显示任何数据)

现在,如果您要返回主屏幕页面,请将此参数从左侧拖到主屏幕页面上并将其设置为文本框。使用它并在您输入内容后按回车键将显示与您目前输入的内容相匹配的结果。

上面的内容再多一点,如果您单击“编辑 PostRender 代码”并添加以下内容,然后在输入 3 个字符后,table 列表您的搜索将在每次手指敲击后自动更新...

$searchBox = $("input", $(element));
setTimeout(function () {
    $searchBox.focus();
}, 1);

   onInputAsYouType(element, 1, function (text) {
    contentItem.screen.[CREATED PARAM NAME] = text; //SearchText here is the data item in the screen designer linked to the query parameter
});

function onInputAsYouType(element, numberOfRequiredChars, done) {
    var inputbox = $("input", $(element));
    inputbox.on("input", function (e) {
        var text = $(this).val();
        if (text.length >= numberOfRequiredChars)
            done(text);
    });
};

};