【发布时间】:2011-06-22 01:58:01
【问题描述】:
我有一个基本的EntityDataSource 绑定到GridView。我在GridView 上方有TextBox 用于搜索。
我的目标: a) 用户类型“jon” b) GridView` 被过滤,例如“乔纳森”,“恩乔纳”,“乔纳斯”。
我已经看到了几个如何将参数化的 LIKE 子句添加到我的数据源的 Where 属性的示例,但是它们都需要用户在搜索字符串中使用通配符(例如 %Jon 而不是 Jon)。这对于非专业用户来说是不可接受的,所以我想将通配符放在 Where 子句中。
SQL中的语法很明显:SELECT Name FROM Names WHERE Name LIKE N'%@p1%'
换句话说,如果@p1='Jon',我的WHERE子句就是LIKE N'%Jon%'。
令人沮丧的是,EntityDataSource 中的 Where 子句似乎无法以这种方式工作。换句话说,以下内容不起作用:
<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%'",效果很好。
有人知道怎么做吗?
【问题讨论】:
标签: c# asp.net gridview sql-like entitydatasource