Я настраивал страницу, используя базу данных Northwind и таблицу «Сотрудники». Существует элемент управления TextBox и Button, как и ваш код для фильтрации данных. Когда TextBox пуст, отображаются все записи. Когда EmployeeID вводится в TextBox и нажимается кнопка «Фильтр», отображается только сотрудник с EmployeeID (если он присутствует в данных). Я думаю, что такое поведение, о котором вы просите. Вот разметка:
<form id="form1" runat="server">
<div>
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=NWEntities" DefaultContainerName="NWEntities"
EntitySetName="EmployeeSet" EntityTypeFilter="Employee" AutoGenerateWhereClause="true"
Select="it.[EmployeeID], it.[LastName], it.[FirstName], it.[Title], it.[TitleOfCourtesy], it.[BirthDate]">
<WhereParameters>
<asp:FormParameter FormField="txtFilter" Name="EmployeeID" Type="Int32" />
</WhereParameters>
</asp:EntityDataSource>
<asp:TextBox ID="txtFilter" runat="server" />
<asp:Button runat="server" Text="Filter" />
<asp:GridView ID="gvEmployees" runat="server" DataSourceID="EntityDataSource1" AutoGenerateColumns="true" />
</div>
</form>
Редактировать: Был поднят вопрос о том, как часть значения может быть введена в текстовое поле фильтра, чтобы получить все значения, которые начинаются с введенного значения. Вы можете использовать оператор LIKE SQL, и пользователям нужно будет сказать, что символ «%» является подстановочным знаком. Я изменил фильтр на поле FirstName. Вот изменения в приведенном выше коде:
В теге EntityDataSource:
AutoGenerateWhereClause="false"
Where="it.[FirstName] LIKE @FirstName"
В теге WhereParameters:
<asp:FormParameter FormField="txtFilter" Name="FirstName" Type="String" DefaultValue="%" />
Теперь, когда "n%" введено в текстовое поле фильтра, будут отображены все записи со значением FirstName, которое начинается с "n". Теперь можно использовать любое допустимое предложение LIKE.