3

我有一个包含一些单字符值的下拉列表,一个值只是一个带引号的、分隔的多个值的字符串:

 <asp:DropDownList ID="ddlStatus" runat="server" style="margin-top: 0px">
     <asp:ListItem Value="'I','A','P'">All</asp:ListItem>
     <asp:ListItem Value="A">Active</asp:ListItem>
     <asp:ListItem Value="I">Inactive</asp:ListItem>
     <asp:ListItem Value="P">Prospect</asp:ListItem>
 </asp:DropDownList>

我只是想使用 ddlStatus.SelectedValue 作为我的数据源的参数,它在很大程度上是通过 ControlParameter 工作的:

<asp:ControlParameter ControlID="ddlStatus" DefaultValue=""
    name="SearchStatus" PropertyName="SelectedValue" Type="String" Size="12" /> 

该参数用于 T-SQL 查询:

...状态在哪里(@SearchStatus)

单个值可以很好地传递和解析,返回正确的结果。然而,多值字符串显然不是按字面意思传递的,因为返回的记录总是匹配字符串中第一个字母的记录,无论我是否以及在何处为值添加引号。(例如,'I','A','P' 的值仅选择 status = 'I' 的记录。)

我的调试表明 ddlStatus.SelectedValue 确实具有“'I','A','P'”的值,但这似乎不是传递给数据源的值。

似乎发生了一些额外的翻译或截断?

4

1 回答 1

0

一种替代方法是不要在参数中包含所有状态值,而是可以将空值传递给状态参数并使用合并函数(假设您正在连接到 Sql Server)。如果提供,这将匹配特定状态,否则如果该参数的值为 null 它只返回状态列等于其自身的所有记录(总是!)。

WHERE Status = COALESCE(@SearchStatus, Status)

更多关于合并的阅读:http: //msdn.microsoft.com/en-us/library/ms190349.aspx

于 2013-09-17T21:11:39.473 回答