[英]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] <> @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.