gpt4 book ai didi

c# - ASP.NET SqlDataSource 筛选器行为

转载 作者:行者123 更新时间:2023-11-29 12:06:57 26 4
gpt4 key购买 nike

我有一个通过 SqlDataSource 提供的 GridView 对象。在同一表单中,我还有许多用于构建数据源过滤表达式的 TextBoxes。通过按按钮启动过滤

<asp:GridView
DataSourceID="sdsTable1"
OnSorting="gvTable1_Sorting"
OnPageIndexChanging="gvTable1_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="gvTable1_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 %>"
DataSourceMode="DataSet"
SelectCommand=" SELECT id, id_user, price, description FROM view1 WHERE id_user = @id_user;">
<SelectParameters>
<asp:SessionParameter Type="Int32" Name="id_user" SessionField="USER_ID" />
</SelectParameters>
</asp:SqlDataSource>

在代码隐藏中(在与上述 Button 关联的事件处理程序中),我使用以下代码构建了链接 TextBoxes 值的过滤器表达式:

    if (!string.IsNullOrWhiteSpace(_txtFilter0.Text.Trim()))
{
_sFilter += "(description LIKE '%" + _txtFilter0.Text.Trim() + "%')";
}

if (!string.IsNullOrWhiteSpace(_txtFilter1.Text.Trim()))
{
if (!string.IsNullOrWhiteSpace(_sFilter))
_sFilter += " AND";

_sFilter += "(description LIKE '%" + _txtFilter1.Text.Trim() + "%')";
}

sdsTable1.FilterExpression = _sFilter;

一切正常,直到我清除导致空过滤器的字段,在这种情况下,我希望检索所有记录,但由于某种原因,在这种情况下,最后一个记录集被保留并显然没有原因地显示。

我还尝试禁用 SQLDataSource 缓存功能,但没有成功:

    EnableCaching="false"

我还尝试发出 Select 命令,但同样没有运气:

 sdsTable1.Select(DataSourceSelectArguments.Empty);

我哪里错了?

最佳答案

您的 _sFilter 属性将在回发期间保留,因此,由于您仅在过滤器文本框为空时才更新它,因此当您清除它们时,它将保留为最后设置的值。在代码中的 _sdsTable1.FilterExpression = _sFilter; 行处放置一个断点应该可以确认这一点。

要解决此问题,请在事件处理程序中重建 _sFilter 属性之前清除它,或者编写额外的检查:

if (string.IsNullOrWhiteSpace(_txtFilter1.Text.Trim()) & string.IsNullOrWhiteSpace(_txtFilter0.Text.Trim()) )
{
_sFilter = null;
}

关于c# - ASP.NET SqlDataSource 筛选器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com