[英]ASP.NET SqlDataSource filter behaviour
我有一個通過SqlDataSource
的GridView
對象供稿。 同樣,我也有許多用於為數據源構建過濾表達式的文本框。 按下按鈕開始“過濾”。
<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事件中),我使用以下代碼構建了鏈接文本框值的過濾器表達式:
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);
我哪里錯了?
_sFilter屬性將在回發之間保持不變,因此,僅當過濾器文本框不為空時才更新它,因此清除它們時,它們將保留為最后的設置值。 在代碼中的_sdsTable1.FilterExpression = _sFilter;
行中放置一個斷點_sdsTable1.FilterExpression = _sFilter;
應該確認這一點。
要解決此問題,請先清除_sFilter屬性,然后再在事件處理程序中對其進行重建,或者進行其他檢查:
if (string.IsNullOrWhiteSpace(_txtFilter1.Text.Trim()) & string.IsNullOrWhiteSpace(_txtFilter0.Text.Trim()) )
{
_sFilter = null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.