0

私はGridviewこれを次SqlDataSourceのように使用していますDataSource

<asp:SqlDataSource ID="dsMetal" runat="server" 
        ConnectionString="<%$ConnectionStrings:connStr%>"
        SelectCommand="select MetalName, MetalID, IsAvailable from Metal Where IsDeleted = 0" FilterExpression="IsAvailable like '%{0}%'>
   <asp:ControlParameter Name="IsAvailable" ControlID="ddlIsMetalAvailable" PropertyName="SelectedValue" Type="Boolean" />
</asp:SqlDataSource>

そして、これは私の DropDownList です:

<asp:DropDownList ID="ddlIsMetalAvailable" DataValueField="IsAvailable"
     AppendDataBoundItems="true" AutoPostBack="true" runat="server" Width="150">
                        <asp:ListItem Text="True"  Value="True" />
                        <asp:ListItem Text="False"  Value="False" />
</asp:DropDownList>

エラーが発生します:

System.Boolean および System.String に対して「Like」操作を実行できません。

このフィルター式も試しましたが、役に立ちません:

FilterExpression="Convert(IsAvailable, 'System.Boolean') like '%{0}%'
4

1 に答える 1

2

エラーメッセージを読んでください-何が問題なのかがはっきりとわかります:

System.Boolean および System.String に対して「Like」操作を実行できません。

ブール値では使用できませんLIKE完全一致を使用する必要があります。

したがって、マークアップを次のように変更します。

<asp:SqlDataSource ID="dsMetal" runat="server" 
        ConnectionString="<%$ConnectionStrings:connStr%>"
        SelectCommand="select MetalName, MetalID, IsAvailable from Metal Where IsDeleted = 0" 
        FilterExpression="IsAvailable = {0}'>   <=== HERE - use = {0} instead of LIKE
   <FilterParameters>
      <asp:ControlParameter Name="IsAvailable" ControlID="ddlIsMetalAvailable" 
                            PropertyName="SelectedValue" Type="Boolean" />
   </FilterParameters>
</asp:SqlDataSource>

この変更により、問題なく動作するはずです。

于 2013-01-03T06:16:41.783 に答える