Okay, I have to be missing something very simple here, but I've banged my head enough and need some help.
I have a user control and a simple master/detail grid placed in it.
I have placed custom filter controls in the header.
Problem:
When the user control loads into my page, the grid is populated just fine (approximately 99 rows returned). I then select an OrderNumber from my custom filter combo box and the grid rebinds perfectly. I have one row returned, which is exactly what is expected. However, when I go to the same combo box filter and select "All", I get no rows returned. However, while debugging, I can clearly see the datasource being reset to the original 99 rows returned. I have tried this with NeedDataSource event handling and without (meaning I brute force it to rebind).
I can make this work without any problems if I place the grid directly into an aspx page, but for some reason I'm having a hard time when its inside a user control.
Below is the code pertaining to this issue. Any help would be appreciated. One other thing, I have tried turning off viewstate (not really an option since I need viewstate), setting datasources to null, rebinding, not forcing rebind.......etc.....etc......etc....
Now the relevant code behind (this is the way I last tried...brute force):
I have a user control and a simple master/detail grid placed in it.
I have placed custom filter controls in the header.
Problem:
When the user control loads into my page, the grid is populated just fine (approximately 99 rows returned). I then select an OrderNumber from my custom filter combo box and the grid rebinds perfectly. I have one row returned, which is exactly what is expected. However, when I go to the same combo box filter and select "All", I get no rows returned. However, while debugging, I can clearly see the datasource being reset to the original 99 rows returned. I have tried this with NeedDataSource event handling and without (meaning I brute force it to rebind).
I can make this work without any problems if I place the grid directly into an aspx page, but for some reason I'm having a hard time when its inside a user control.
Below is the code pertaining to this issue. Any help would be appreciated. One other thing, I have tried turning off viewstate (not really an option since I need viewstate), setting datasources to null, rebinding, not forcing rebind.......etc.....etc......etc....
| <telerik:RadGrid ID="rgvOrderHistory" runat="server" AllowPaging="True" |
| AllowCustomPaging="true" OnSortCommand="rgvOrderHistory_SortCommand" AllowSorting="true" OnItemDataBound="rgvOrderHistory_ItemDataBound"> |
| <MasterTableView DataKeyNames="OrderNumber" AllowPaging="true" PageSize="10" PagerStyle-AlwaysVisible="true" |
| PagerStyle-Mode="NextPrev" AutoGenerateColumns="false" AllowFilteringByColumn="true"> |
| <DetailTables> |
| <telerik:GridTableView DataKeyNames="OrderNumber" Name="OrderDetails" Width="100%" runat="server" AllowSorting="true" |
| AllowPaging="true" PageSize="10" PagerStyle-AlwaysVisible="true" AllowCustomPaging="true" PagerStyle-Mode="NextPrev" AutoGenerateColumns="false"> |
| <Columns> |
| <telerik:GridBoundColumn SortExpression="Description" HeaderText="Description" HeaderButtonType="TextButton" |
| DataField="Description"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="QuantityOrdered" HeaderText="Quantity Ordered" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="QuantityOrdered" ItemStyle-HorizontalAlign="Center" > |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="ShortSku" HeaderText="SKU" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="ShortSku" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="SalesPrice" HeaderText="Sales Price" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="SalesPrice" DataFormatString="{0:c}" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="ExtendedPrice" HeaderText="Ext Price" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="ExtendedPrice" DataFormatString="{0:c}" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="OrderTrackingNumber" HeaderText="Tracking Number" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="OrderTrackingNumber" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="DetailStatus" HeaderText="Order Status" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="DetailStatus" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| </Columns> |
| </telerik:GridTableView> |
| </DetailTables> |
| <NoRecordsTemplate> |
| <strong><asp:Label ID="lblNoRecords" runat="server" Text="No available orders."></asp:Label></strong> |
| </NoRecordsTemplate> |
| <Columns> |
| <telerik:GridBoundColumn SortExpression="OrderDate" HeaderText="Order Date" HeaderButtonType="TextButton" |
| DataField="OrderDate" DataFormatString="{0:d}"> |
| <FilterTemplate> |
| <telerik:RadDatePicker ID="rdpFilterFromDate" runat="server" MaxDate="9999-12-31 11:59:59 PM" |
| AutoPostBack="true" OnSelectedDateChanged="rdpFilterFromDate_SelectedDateChanged" > |
| </telerik:RadDatePicker> |
| to |
| <telerik:RadDatePicker ID="rdpFilterToDate" runat="server" MaxDate="9999-12-31 11:59:59 PM" |
| AutoPostBack="true" OnSelectedDateChanged="rdpFilterToDate_SelectedDateChanged" > |
| </telerik:RadDatePicker> |
| </FilterTemplate> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="OrderNumber" HeaderText="Order Number" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="OrderNumber" ItemStyle-HorizontalAlign="Center" UniqueName="OrderNumber"> |
| <FilterTemplate> |
| <telerik:RadComboBox ID="cbxFilterOrderNumber" |
| DataTextField="OrderNumber" |
| DataSource='<%# GetOrderDropDown()%>' |
| OnSelectedIndexChanged="cbxFilterTypes_SelectedIndexChanged" |
| DataValueField="OrderNumber" |
| Height="200px" |
| AppendDataBoundItems="true" |
| SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("OrderNumber").CurrentFilterValue %>' |
| runat="server" |
| AutoPostBack="true" |
| OnClientSelectedIndexChanged="TitleIndexChanged"> |
| <Items> |
| <telerik:RadComboBoxItem Value="-1" Text="All" /> |
| </Items> |
| </telerik:RadComboBox> |
| <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server"> |
| <script type="text/javascript"> |
| function TitleIndexChanged(sender,args) { |
| var tableView=$find("<%# ((GridItem)Container).OwnerTableView.ClientID %>"); |
| tableView.filter("OrderNumber",args.get_item().get_value(),"EqualTo"); |
| } |
| </script> |
| </telerik:RadScriptBlock> |
| </FilterTemplate> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="Total" HeaderText="Order Total" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="Total" DataFormatString="{0:c}" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn SortExpression="OrderType" HeaderText="Order Type" HeaderButtonType="TextButton" HeaderStyle-HorizontalAlign="Center" |
| DataField="OrderType" ItemStyle-HorizontalAlign="Center"> |
| </telerik:GridBoundColumn> |
| </Columns> |
| </MasterTableView> |
| </telerik:RadGrid> |
Now the relevant code behind (this is the way I last tried...brute force):
| protected void Page_Load(object sender, EventArgs e) |
| { |
| if (!IsPostBack) |
| { |
| ViewState[GRIDSORTDIRECTION] = "DESC"; |
| ViewState[GRIDSORTORDER] = "OrderDate"; |
| ViewState[FILTERFROMDATE] = null; |
| ViewState[FILTERTODATE] = null; |
| ViewState[FILTERTONUMBER] = null; |
| Guid g = new Guid("A2E02D63-2B56-42F8-95C7-DC98DFCCB146"); |
| _BOUserAccount = new BOUserAccount(g); |
| Session["BOUserAccount"] = _BOUserAccount; |
| GetOrderHistoryDataSource(true); |
| } |
| } |
| protected void GetOrderHistoryDataSource(bool bindIt) |
| { |
| DateTime? fromDate = null, toDate = null; |
| int? orderNumber = null; |
| if (ViewState[FILTERFROMDATE] != null) |
| { |
| fromDate = Convert.ToDateTime(ViewState[FILTERFROMDATE]); |
| } |
| if (ViewState[FILTERTODATE] != null) |
| { |
| toDate = Convert.ToDateTime(ViewState[FILTERTODATE]); |
| } |
| if (ViewState[FILTERTONUMBER] != null) |
| { |
| orderNumber = Convert.ToInt32(ViewState[FILTERTONUMBER]); |
| } |
| BOUserAccount boUserAccount2 = (BOUserAccount)Session["BOUserAccount"]; |
| int orderCount; |
| rgvOrderHistory.DataSource = boUserAccount2.GetOrderHistory(boUserAccount2.UserID, false, ViewState[GRIDSORTORDER].ToString(), |
| ViewState[GRIDSORTDIRECTION].ToString(), rgvOrderHistory.PageSize, rgvOrderHistory.CurrentPageIndex |
| , out orderCount, fromDate, toDate, orderNumber); |
| rgvOrderHistory.VirtualItemCount = orderCount; |
| if (bindIt) |
| { |
| rgvOrderHistory.Rebind(); |
| } |
| } |
| protected List<OrderHeaderHistory> GetOrderDropDown() |
| { |
| BOUserAccount boUserAccount2 = (BOUserAccount)Session["BOUserAccount"]; |
| int orderCount; |
| return boUserAccount2.GetOrderHistory(boUserAccount2.UserID, true, "OrderNumber","ASC", null, null, out orderCount, null, null, null); |
| } |
| protected void cbxFilterTypes_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e) |
| { |
| ViewState[FILTERTONUMBER] = e.Value == "-1" ? null : e.Value; |
| oFilterValue = e.Value; |
| string filterExpression = "([OrderNumber] = '" + e.Value + "')"; |
| rgvOrderHistory.MasterTableView.FilterExpression = filterExpression; |
| GetOrderHistoryDataSource(true); |
| //rgvOrderHistory.MasterTableView.DataSource = null; |
| //rgvOrderHistory.MasterTableView.Rebind(); |
| //rgvOrderHistory.Rebind(); |
| } |