3

我对 a 有一个基本EntityDataSource的约束GridView。我有TextBox上面的GridView搜索。

我的目标:a)用户类型“jon” b)GridView`被过滤,例如“Jonathan”,“Enjona”,“Jonas”。

我已经看到了几个如何将参数化的 LIKE 子句添加到我的数据源的 Where 属性的示例,但是它们都需要用户在搜索字符串中使用通配符(例如 %Jon 而不是 Jon)。这对于非专业用户来说是不可接受的,所以我想将通配符放在 Where 子句中。

SQL 中的语法很明显:SELECT Name FROM Names WHERE Name LIKE N'%@p1%'

换句话说,如果@p1='Jon',我的 WHERE 子句是 LIKE N'%Jon%'

令人沮丧的是, 中的 Where 子句EntityDataSource似乎不是这样工作的。换句话说,以下内容不起作用:

<asp:EntityDataSource ID="edsNames" runat="server" 
    ConnectionString="name=SalesEntities" 
    DefaultContainerName="SalesEntities" EntitySetName="Names"
    OrderBy="it.Name" Where="it.Name LIKE '%@p1%'">
    <WhereParameters>
        <asp:ControlParameter ControlID="txtFilter" Name="p1" 
            PropertyName="Text" Type="String" DefaultValue="" />
    </WhereParameters>
</asp:EntityDataSource>

我很高兴地期望 "" 的默认值能够为我提供我的“获取一切”子句,即LIKE '%%',但我的GridView.

令人沮丧的是,如果我对搜索结果进行硬编码,例如Where="it.Name LIKE '%Jon%'",它可以完美运行。

有谁知道这样做的方法?

4

3 回答 3

4

我让它像这样工作:

Where="it.Name like ('%' + @p1 + '%')"

这适用于 .NET 3.5 - 我认为 QueryExtender 加上 OnQueryCreated(这也是在查询运行之前调整查询的一个选项)仅在 .NET >= 4.0 中可用。

于 2012-05-22T09:36:41.397 回答
3

您可以尝试如下编写 where 条件

Where="@p1 IS NULL OR it.Name LIKE '%@p1%'"  

以防万一它被视为空值

于 2012-01-15T12:37:03.307 回答
1

您可以使用 QueryExtender 完成此操作。这些方面的东西:

  <asp:EntityDataSource ID="edsEmployeeSearch" runat="server" 
    ConnectionString="name=HrProtoEntities" DefaultContainerName="HrProtoEntities" 
    EnableFlattening="False" EntitySetName="People" Include="Employee" 
    AutoGenerateWhereClause="True" >
</asp:EntityDataSource>
<asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="edsEmployeeSearch">
    <asp:SearchExpression SearchType="Contains" DataFields="LastName">
        <asp:ControlParameter ControlID="txtSearch" />
    </asp:SearchExpression>
</asp:QueryExtender>
于 2011-03-01T18:12:18.670 回答