LinqDataSource - фильтрация для нулевых значений

Я пишу веб-приложение ASP.Net. У меня есть listview, это источник данных LinqDataSource. В моей базе данных есть таблица персонала, и я пытаюсь отфильтровать записи по их команде, используя раскрывающийся список. Это работает нормально, пока я не выберу "Все" в выпадающем списке. Возвращает весь персонал, кроме тех, где teamID равен нулю. Как я могу вернуть записи, где teamID равен нулю?

Это мой код:

<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

Я думал, что если я удалю параметр where, когда выпадающий список "Все", это заставит его вернуть все записи, но это не сработает.

Пожалуйста помоги!

Спасибо Эмма

1 ответ

Если вы все равно обрабатываете событие выбора, я бы все вместе удалил предложение Where в вашем источнике данных и обработал все в событии выбора, установив значение e.Result для вашего запроса linq.

Тогда в вашем ddlTeamFilter перепривязать просмотр списка при изменении.

Надеюсь это поможет.

Другие вопросы по тегам