3

に基本的な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句はLIKEN'%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>

デフォルト値の「」が「geteverything」句を提供することを喜んで期待します。つまり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%'"  

null 値と見なされる場合に備えて

于 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 に答える