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>

这是我的下拉列表:

<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 执行“点赞”操作。

我也试过这个过滤器表达式,但它对我没有帮助:

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

1 回答 1

2

只需阅读错误消息 - 它清楚地说明了问题所在:

无法对 System.Boolean 和 System.String 执行“点赞”操作。

不能使用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 回答