У меня есть GridView
объект, подающий лоток через SqlDataSource
. В том же виде у меня также есть ряд текстовых полей, используемых для создания фильтрационного выражения для источника данных. «Фильтрация» запускается нажатием кнопки.Поведение фильтра ASP.NET SqlDataSource
<asp:GridView
DataSourceID="_sdsTable1"
OnSorting="_gvTable1_Sorting"
OnPageIndexChanging="_gvMovimenti_PageIndexChanging"
runat="server"
CssClass="list_table"
ID="_gvTable1"
CellPadding="0" CellSpacing="0"
AutoGenerateColumns="false"
EmptyDataText="No data."
ShowHeader="true" ShowFooter="true"
AllowSorting="true"
AllowPaging="true"
PageSize="10"
OnRowDataBound="_gvMovimenti_RowDataBound" >
<HeaderStyle CssClass="header" />
<FooterStyle CssClass="footer" />
<PagerSettings
Visible="true"
Mode="NumericFirstLast"
PageButtonCount="3"
Position="Bottom"
NextPageText="Next page"
PreviousPageText="Prev page"
FirstPageText="First page"
LastPageText="Last page" />
<RowStyle CssClass="odd" />
<AlternatingRowStyle CssClass="even" />
<PagerStyle HorizontalAlign="Center" />
<Columns>
<asp:TemplateField Visible="false">
<HeaderTemplate> </HeaderTemplate>
<ItemTemplate>
<%#Eval("id")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date" SortExpression="date">
<ItemTemplate>
<%#Eval("date","{0:dd/MM/yyyy HH:mm:ss}")%>
</ItemTemplate>
<FooterTemplate>
TOTALE:
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price" SortExpression="price">
<ItemTemplate>
<asp:Label ID="_lblPrice" runat="server" Text='<%# Bind("price","{0:F2} €") %>'>></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="_lblTotal" runat="server" Text="0"></asp:Label
</FooterTemplate>
</asp:TemplateField>
<asp:BoundField DataField="description" HeaderText="Description" SortExpression="description" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="_sdsTable1" runat="server"
ConnectionString="<%$ ConnectionStrings:_db %>"
ProviderName="<%$ ConnectionStrings:_db.ProviderName %>"
SelectCommand=" SELECT * FROM view1 WHERE id_user = @id_user;">
<SelectParameters>
<asp:SessionParameter Type="Int32" Name="id_user" SessionField="USER_ID" />
</SelectParameters>
</asp:SqlDataSource>
В коде (в hanlder событий, связанный с «кнопкой», упомянутой выше) Я застроить выражение фильтра формирования цепочки значения TextBox, с помощью этого кода:
if (!string.IsNullOrWhiteSpace(_txtFilter0.Text.Trim()))
{
_sFilter += "(descrizione LIKE '%" + _txtFilter0.Text.Trim() + "%')";
}
if (!string.IsNullOrWhiteSpace(_txtFilter1.Text.Trim()))
{
if (!string.IsNullOrWhiteSpace(_sFilter))
_sFilter += " AND";
_sFilter += "(descrizione LIKE '%" + _txtFilter1.Text.Trim() + "%')";
}
_sdsTable1.FilterExpression = _sFilter;
Все работает, пока не ясно поля, которые приводят к пустому фильтру. Я ожидал получить все данные. По какой-то причине в этом случае последний набор записей сохраняется и отображается, по-видимому, без причины.
Я пытался также отключить функцию кэширования SqlDataSource без везения:
EnableCaching="false"
Я попытался также выдать команду Select, снова не повезло:
_sdsCrediti.Select(DataSourceSelectArguments.Empty);
Где я ошибаюсь?
Бэкэнд является MySQL – weirdgyn
Чтобы быть точнее 'SQLDataSource' использовать 'View' вместо таблицы. – weirdgyn
Похож, что '_sFilter' не возвращается к нулевому значению, если поля поиска очищаются. Вероятно, он по-прежнему содержит последнее предложение фильтра, поскольку оно изменяется только в том случае, если поля НЕ пусты. Убедитесь, что вы сбросили его. – Crowcoder