2010-08-19 15 views
0

J'écris une application web ASP.Net. J'ai listview, c'est datasource est un LinqDataSource. Dans ma base de données, j'ai une table d'état-major et j'essaie de filtrer les enregistrements par leur équipe en utilisant une liste déroulante. Cela fonctionne bien, jusqu'à ce que je sélectionne "Tous" dans la liste déroulante. Il retourne tout le personnel, sauf ceux où le teamID est nul. Comment puis-je retourner les enregistrements où teamID est nul?LinqDataSource - Filtrage pour les valeurs nulles

Ceci est mon code:

<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> 

Dans mon code derrière je gère l'événement de sélection 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 

Je pensais que si j'ai enlevé le whereparameter lorsque le dropdownlist est "All" il le forcerait à retourner tous les enregistrements, mais cela ne fonctionne pas.

Aidez s'il vous plaît!

Merci, Emma

Répondre

0

Si vous gérez l'événement de sélection de toute façon je supprimerait la clause Where dans votre source de données tous ensemble et tout gérer en cas de sélection définissant la valeur e.Result à votre requête LINQ.

Ensuite, dans votre ddlTeamFilter, relancez la liste en cas de modification.

Espérons que cela aide.