简体   繁体   English

过滤器仅在第一次火灾时起作用

[英]Filter Only works on first fire

So, I have a gridview that is populated by sqldatasource and on side of it I have a filter list. 因此,我有一个由sqldatasource填充的gridview,在它的一边,我有一个过滤器列表。 One of the items is a dropdown. 其中一项是下拉菜单。 What happens is when the page first loads and I select an item. 当页面首次加载并且我选择一个项目时,会发生什么。 The filter works, but if I then try to change to something else it doesn't change. 筛选器有效,但是如果我尝试更改为其他内容,则不会更改。 I have debugged and it goes through the sql onselecting method when I call bind on index changed. 我已经调试,并且当我在索引更改时调用绑定时,它会通过sql onselecting方法。

I tried a recommendation to set the filter expression on index change and then call data bind (removing the onselecting function) and that still did not work. 我尝试了一项建议,以在索引更改时设置过滤器表达式,然后调用数据绑定(删除onselecting函数),但仍然无法正常工作。

Edit: Here is some markup/code as requested 编辑:这是根据要求的一些标记/代码

DataSource: 数据源:

<asp:SqlDataSource ID="datasource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" OnSelecting="ApplyFilter"
    SelectCommand="SELECT [CustomerId], [CustomerCancelationStatus], [CustomerGroup], [CustomerFirstName], [CustomerLastName], [CustomerFullName], [CompanyName], [CustomerAddress], [CustomerCity], [CustomerState], [CustomerZipcode], [CustomerFullAddress], [CustomerEmail], [CustomerEmail2], [CustomerPhoneNumber], [CustomerPhoneNumberExt], [CustomerType], [CustomerSubscriptionType], [CustomerCost], [CustomerPaymentMethod], [CustomerSignUpDate], [CustomerPickUpDay], [CustomerPickUpDay2], [CustomerNotes], [CustomerDriver], [HowHeard], [NewBinsRequested] FROM [Customers] WHERE ([CustomerStatus] &lt;&gt; @CustomerStatus) ORDER BY CustomerFirstName ASC">
    <SelectParameters>
        <asp:Parameter DefaultValue="Inactive" Name="CustomerStatus" Type="String" />
    </SelectParameters> 
</asp:SqlDataSource>

DropDown: 落下:

<asp:DropDownList ID="ddlDriver" runat="server" AutoPostBack="True" 
            DataSourceID="driverDataSource" DataTextField="DriverUsername" 
            DataValueField="DriverUsername" AppendDataBoundItems="True" 
            onselectedindexchanged="ddlDriver_OnSelectedIndexChanged" 
            Height="21px" style="position: relative; top: 2px; left: 3px" Width="150px">
            <asp:ListItem>Select...</asp:ListItem>
        </asp:DropDownList>

Grid: 网格:

<asp:GridView ID="CustomersGridView" runat="server" AllowPaging="True" 
        AllowSorting="True" AutoGenerateColumns="False" BackColor="White" 
        BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
        DataKeyNames="CustomerId" DataSourceID="SqlDataSource1" ForeColor="Black" 
        GridLines="Vertical" 


        style="z-index: 1; left: 193px; top: -486px; position: relative; height: 35px; width: 600px; text-align: center;" 
        PageSize="500" ShowHeaderWhenEmpty="True" OnPageIndexChanged="CustomersGridView_PageIndexChanged">
        <AlternatingRowStyle BackColor="#CCCCCC" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="CustomerSelectionCheckBox" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="CustomerId" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="CustomerId" />
            <asp:BoundField DataField="CustomerFullName" HeaderText="Name" SortExpression="CustomerFullName"></asp:BoundField>
            <asp:BoundField DataField="CustomerFullAddress" HeaderText="Address" SortExpression="CustomerFullAddress" />
            <asp:BoundField DataField="CustomerPickUpDay" HeaderText="Pick-Up Day" SortExpression="CustomerPickUpDay"></asp:BoundField>
            <asp:BoundField DataField="CustomerGroup" HeaderText="Group" SortExpression="CustomerGroup" />
            <asp:BoundField DataField="CustomerSignUpDate" HeaderText="Sign-Up Date" SortExpression="CustomerSignUpDate" DataFormatString="{0:d}"></asp:BoundField>
            <asp:BoundField DataField="CustomerSubscriptionType" HeaderText="Subscription" SortExpression="CustomerSubscriptionType" Visible="False" />
            <asp:BoundField DataField="CustomerCost" HeaderText="Cost" SortExpression="CustomerCost" Visible="False" />
            <asp:BoundField DataField="CustomerDriver" HeaderText="Driver" SortExpression="CustomerDriver" Visible="False" />
            <asp:BoundField DataField="HowHeard" HeaderText="How Heard" SortExpression="HowHeard" Visible="False" />
            <asp:BoundField DataField="NewBinsRequested" HeaderText="Bins Requested" SortExpression="NewBinsRequested" Visible="False" />
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:Button ID="EditButton" runat="server" CausesValidation="false" CommandName="" OnClick="EditButton_Click" Text="Edit" CommandArgument='<%# Eval("CustomerID") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#CCCCCC" />
        <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#808080" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#383838" />
    </asp:GridView>

ApplyFilter (onSelecting) [there are many more items, but this is what's pertinent]: ApplyFilter(onSelecting)[还有很多项目,但这是相关的]:

    if (ddlDriver.Text != "Select...")
                {
                    if (!string.IsNullOrEmpty(SqlDataSource1.FilterExpression))
                    {
                        SqlDataSource1.FilterExpression += " AND [CustomerDriver]='{0}'";
                        SqlDataSource1.FilterParameters.Add("@CustomerDriver", ddlDriver.Text);
                    }
                    else
                    {
                        SqlDataSource1.FilterExpression = "[CustomerDriver]='{0}'";
                        SqlDataSource1.FilterParameters.Add("@CustomerDriver", ddlDriver.Text);
                    }
                }
if (!String.IsNullOrEmpty(SqlDataSource1.FilterExpression))
            {
                SqlDataSource1.FilterExpression +=
                    " AND [CustomerStatus] <> 'Inactive' AND [CustomerStatus] <> 'Canceled'";
            }

OnSelectedIndexChanged for dropdown: 用于下拉列表的OnSelectedIndexChanged:

protected void ddlDriver_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            CustomersGridView.DataBind();
        }

Oh and this is in page load, not sure if it matters: 哦,这是在页面加载中,不确定是否重要:

if (Page.IsPostBack)
            {
                if (SearchTextBox.Text.Length > 0)
                {
                    var searchtext = SearchTextBox.Text + "*";
                    //var ctrlParam = new ControlParameter
                    //    {
                    //        ControlID = "SearchTextBox",
                    //        PropertyName = "Text",
                    //        Name = "Search"
                    //    };
                    var ctrlParam2 = new QueryStringParameter
                        {
                            DefaultValue = "Canceled",
                            QueryStringField = "Canceled",
                            Name = "CustomerStatus",
                            Type = TypeCode.String
                        };
                    var ctrlParam3 = new QueryStringParameter
                        {
                            DefaultValue = "Confirmed",
                            QueryStringField = "Confirmed",
                            Name = "CustomerCancelationStatus",
                            Type = TypeCode.String
                        };
                    SqlDataSource1.SelectParameters.Clear();
                    //SqlDataSource1.SelectParameters.Add(ctrlParam);
                    SqlDataSource1.SelectParameters.Add("Search", TypeCode.String, searchtext);
                    SqlDataSource1.SelectParameters.Add(ctrlParam2);
                    SqlDataSource1.SelectParameters.Add(ctrlParam3);
                    SqlDataSource1.SelectCommand = "SELECT FullText_for_Customers.RANK, [CustomerId], [CustomerStatus], [CustomerGroup], [CustomerFirstName], [CustomerLastName], [CustomerFullName], [CompanyName], [CustomerAddress], [CustomerCity], [CustomerState], [CustomerZipcode], [CustomerFullAddress], [CustomerEmail], [CustomerEmail2], [CustomerPhoneNumber], [CustomerPhoneNumberExt], [CustomerType], [CustomerSubscriptionType], [CustomerCost], [CustomerPaymentMethod], [CustomerPickUpDay], [CustomerPickUpDay2], [CustomerSignUpDate], [CustomerNotes], [CustomerDriver] FROM [Customers] INNER JOIN CONTAINSTABLE(Customers, (CustomerFirstName, CustomerLastName, CustomerFullName, CompanyName, CustomerAddress, CustomerCity, CustomerState, CustomerZipcode, CustomerFullAddress, CustomerEmail, CustomerEmail2, CustomerPhoneNumber, CustomerNotes), @Search) as FullText_for_Customers ON FullText_for_Customers.[KEY]=Customers.CustomerId WHERE ([CustomerStatus] <> @CustomerStatus) AND ([CustomerCancelationStatus] <> @CustomerCancelationStatus) ORDER BY CustomerFirstName ASC";
                }
                else
                {
                    var ctrlParam2 = new QueryStringParameter
                        {
                            DefaultValue = "Canceled",
                            QueryStringField = "Canceled",
                            Name = "CustomerStatus",
                            Type = TypeCode.String
                        };
                    var ctrlParam3 = new QueryStringParameter
                    {
                        DefaultValue = "Inactive",
                        QueryStringField = "Inactive",
                        Name = "CustomerStatus2",
                        Type = TypeCode.String
                    };
                    SqlDataSource1.SelectParameters.Clear();
                    SqlDataSource1.SelectParameters.Add(ctrlParam2);
                    SqlDataSource1.SelectParameters.Add(ctrlParam3);
                    SqlDataSource1.SelectCommand = "SELECT [CustomerId], [CustomerStatus], [CustomerGroup], [CustomerFirstName], [CustomerLastName], [CustomerFullName], [CompanyName], [CustomerAddress], [CustomerCity], [CustomerState], [CustomerZipcode], [CustomerFullAddress], [CustomerEmail], [CustomerEmail2], [CustomerPhoneNumber], [CustomerPhoneNumberExt], [CustomerType], [CustomerSubscriptionType], [CustomerCost], [CustomerPaymentMethod], [CustomerPickUpDay], [CustomerPickUpDay2], [CustomerNotes], [CustomerDriver], [CustomerSignUpDate], [HowHeard], [NewBinsRequested] FROM [Customers] WHERE ([CustomerStatus] <> @CustomerStatus AND [CustomerStatus] <> @CustomerStatus2) ORDER BY CustomerFirstName ASC";
                }
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM