2010-08-19 49 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上的改變。

希望這會有所幫助。