2011-02-05 10 views
3

GridViewにバインドされた基本EntityDataSourceがあります。 GridViewの上にTextBoxがあります。EntityDataSourceでパラメータ化されたLIKE句を使用する

私の目標: a)ユーザータイプ "jon" b)GridViewはフィルタリングされています。 "Jonathan"、 "Enjona"、 "Jonas"。

データソースのWhereプロパティにパラメータ化されたLIKE句を追加する方法の例をいくつか見てきましたが、ユーザーは検索文字列にワイルドカードを使用する必要があります(例:Jonではなく%Jon)。これは一般のユーザーには受け入れられないため、代わりにWhere句にワイルドカードを入れたいと考えています。 SQLで

構文は明白である:つまり名LIKE N '%の@ P1は%' 名

から名前を選択、句がN '%LIKEジョンは私の@ P1 = 'ジョン'、場合% '。

厄介なことに、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%'"、それは完全に動作します。

誰でもこれを行う方法を知っていますか?

答えて

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> 
3

あなたは条件としては、私はそれがこのように働いてしまった、それがNULL値

4

と見られているだけの場合には

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

を次の場所を書いてみてください:

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

これは.NET 3.5で動作します - 私はQueryExtenderに加えてOnQueryCreatedと思っています(これはそれが実行される前に照会を適合させるためのオプションであった)は、.NET> = 4.0でのみ利用可能です。

関連する問題