簡體   English   中英

ASP.NET SqlDataSource篩選器行為

[英]ASP.NET SqlDataSource filter behaviour

我有一個通過SqlDataSourceGridView對象供稿。 同樣,我也有許多用於為數據源構建過濾表達式的文本框。 按下按鈕開始“過濾”。

<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>&nbsp;</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} &euro;") %>'>></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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM