2010-08-19 52 views
0

我正在编写一个ASP.Net Web应用程序。我有listview,它的数据源是LinqDataSource。在我的数据库中,我有一个员工表,我正在尝试使用下拉列表筛选他们团队的记录。这工作正常,直到我在下拉列表中选择“全部”。它将返回除teamID为空的所有员工之外的所有员工。如何返回teamID为空的记录?LinqDataSource - 为空值过滤

这是我的代码:

<asp:ListView ID="ListView1" runat="server" DataSourceID="ldsStaff" DataKeyNames="staffID"> 

    <LayoutTemplate> 
<table> 
    <tr> 
    <th>Name</th> 
    <th>Team</th> 
    </tr> 
    <tr> 
    <td>&nbsp</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 &amp;&amp; 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 

我想,如果我删除的whereparameter当下拉列表是“所有”它将强制它返回所有记录,但它不起作用。

请帮忙!

感谢, 艾玛

回答

0

如果你正在处理选择事件反正我会在你的数据源中删除Where子句一起,处理在选择事件设置e.Result价值,你的LINQ查询一切。

然后在你的ddlTeamFilter重新改变listview上的改变。

希望这会有所帮助。