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(); |
} |