我正在编写一个ASP.Net Web应用程序。我有listview,它的数据源是LinqDataSource。在我的数据库中,我有一个员工表,我正在尝试使用下拉列表过滤他们团队的记录。这很好,直到我在下拉列表中选择“全部”。除了teamID为null的那些员工之外,它返回所有员工。如何返回teamID为null的记录?
这是我的代码:
<asp:ListView ID="ListView1" runat="server" DataSourceID="ldsStaff" DataKeyNames="staffID">
<LayoutTemplate>
<table>
<tr>
<th>Name</th>
<th>Team</th>
</tr>
<tr>
<td> </td>
<td><asp:DropDownList ID="ddlTeamFilter" runat="server" DataSourceID="ldsTeams" DataTextField="Team" DataValueField="TeamID" AppendDataBoundItems="true" AutoPostBack="true">
<asp:ListItem Text="[All]" Value=""></asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr ID="itemPlaceHolder" runat="server"></tr>
</table>
</LayoutTemplate>
....
</asp:Listview>
<asp:LinqDataSource ID="ldsStaff" runat="server"
ContextTypeName="ProjectDatabase.ProjectDatabaseUsersDataContext" OrderBy="name"
TableName="Staffs" EnableUpdate="True" Where="inService == @inService && TeamID == @TeamID">
<WhereParameters>
<asp:Parameter DefaultValue="true" Name="inService" Type="Boolean" />
<asp:ControlParameter ControlID="ctl00$ContentPlaceHolder1$ListView1$ddlTeamFilter" Name="TeamID" Type="Int32" PropertyName="SelectedValue"/>
</WhereParameters>
</asp:LinqDataSource>
在我的代码中,我处理了LinqDataSource选择事件:
Private Sub ldsStaff_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles ldsStaff.Selecting
Dim ddl As DropDownList = CType(ListView1.FindControlRecursive("ddlTeamFilter"), DropDownList)
If ddl.SelectedValue = "" Then
e.WhereParameters.Remove("TeamID")
End If
我认为如果我在下拉列表为“全部”时删除了where参数,它会强制它返回所有记录,但它不起作用。
请帮忙!
谢谢, 艾玛
答案 0 :(得分:0)
如果您正在处理选择事件,我会一起删除数据源中的Where子句,并处理选择事件中的所有内容,将e.Result值设置为linq查询。
然后在ddlTeamFilter
重新绑定列表视图。
希望这有帮助。