Hi,
I'm having some problems with records disappearing from grid.
I'm attaching screenshots to show the problem.
This is the behavior of the problem:
Web page is loaded and all records are retrieve (164 records) paged every 10 records (very fast, 3 sec).
Moving to another page of records all works fine but very slow (22 sec).
If I try to filter the grid from the filter field, for a record in the list, the record is not found (confirmed, the record exists).
If I clear the filter (setting button to None) it takes a lot of time to get all record again and only 131 records are showed.
I've confirmed that the bind function always return 164 records and not 131 as grid show.
This is the code for aspx page:
Code Behind for binding:
And this is the code for Customers repository:
Please, any help?
Regards
Jose
I'm having some problems with records disappearing from grid.
I'm attaching screenshots to show the problem.
This is the behavior of the problem:
Web page is loaded and all records are retrieve (164 records) paged every 10 records (very fast, 3 sec).
Moving to another page of records all works fine but very slow (22 sec).
If I try to filter the grid from the filter field, for a record in the list, the record is not found (confirmed, the record exists).
If I clear the filter (setting button to None) it takes a lot of time to get all record again and only 131 records are showed.
I've confirmed that the bind function always return 164 records and not 131 as grid show.
This is the code for aspx page:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="Quasar.WebUI.Customers.Customers.List" %>
<
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"HeadContent"
runat
=
"server"
>
<
title
>Quasar | CRM - Customers List</
title
>
</
asp:Content
>
<
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"MainContent"
runat
=
"server"
>
<
telerik:RadAjaxLoadingPanel
ID
=
"ListRadAjaxLoadingPanel"
runat
=
"server"
Skin
=
"Default"
/>
<
telerik:RadAjaxManager
ID
=
"ListRadAjaxManager"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"ListGrid"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"ListGrid"
LoadingPanelID
=
"ListRadAjaxLoadingPanel"
UpdatePanelHeight
=
""
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadWindowManager
ID
=
"ListRadWindowManager"
runat
=
"server"
/>
<
div
class
=
"findField"
>
<
asp:Label
ID
=
"FindFieldLabel"
runat
=
"server"
AssociatedControlID
=
"FindFieldTextBox"
>Customer :</
asp:Label
>
<
telerik:RadTextBox
ID
=
"FindFieldTextBox"
runat
=
"server"
EmptyMessage
=
"(empty)"
MaxLength
=
"50"
Columns
=
"50"
SelectionOnFocus
=
"SelectAll"
ToolTip
=
"Find Customer"
></
telerik:RadTextBox
>
<
telerik:RadButton
ID
=
"FindButton"
runat
=
"server"
Icon-PrimaryIconUrl
=
"~/Images/Find.png"
Text
=
"Find"
Width
=
"75px"
onclick
=
"FindButton_Click"
>
</
telerik:RadButton
>
</
div
>
<
telerik:RadGrid
ID
=
"ListGrid"
runat
=
"server"
AllowFilteringByColumn
=
"True"
AllowPaging
=
"True"
AllowSorting
=
"True"
AutoGenerateColumns
=
"False"
GridLines
=
"None"
ShowStatusBar
=
"True"
ShowGroupPanel
=
"True"
EnableLinqExpressions
=
"false"
onneeddatasource
=
"ListGrid_NeedDataSource"
onitemcommand
=
"ListGrid_ItemCommand"
>
<
ClientSettings
AllowColumnsReorder
=
"True"
ReorderColumnsOnClient
=
"True"
AllowDragToGroup
=
"True"
>
<
Selecting
AllowRowSelect
=
"False"
/>
</
ClientSettings
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
<
MasterTableView
DataKeyNames
=
"CustomerId"
CommandItemDisplay
=
"Top"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to Pdf"
></
CommandItemSettings
>
<
RowIndicatorColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
<
NestedViewSettings
>
<
ParentTableRelation
>
<
telerik:GridRelationFields
DetailKeyField
=
"ContactId"
MasterKeyField
=
"CustomerId"
/>
<
telerik:GridRelationFields
DetailKeyField
=
"AddressId"
MasterKeyField
=
"CustomerId"
/>
</
ParentTableRelation
>
</
NestedViewSettings
>
<
NestedViewTemplate
>
<
asp:Panel
runat
=
"server"
ID
=
"InnerContainer"
CssClass
=
"viewWrap"
>
<
telerik:RadTabStrip
runat
=
"server"
ID
=
"CustomersTabStrip"
MultiPageID
=
"CustomersMultipage"
SelectedIndex
=
"0"
>
<
Tabs
>
<
telerik:RadTab
runat
=
"server"
Text
=
"Contacts"
PageViewID
=
"ContactsPageView"
>
</
telerik:RadTab
>
<
telerik:RadTab
runat
=
"server"
Text
=
"Addresses"
PageViewID
=
"AddressesPageView"
>
</
telerik:RadTab
>
</
Tabs
>
</
telerik:RadTabStrip
>
<
telerik:RadMultiPage
runat
=
"server"
ID
=
"CustomersMultipage"
SelectedIndex
=
"0"
RenderSelectedPageOnly
=
"false"
>
<
telerik:RadPageView
runat
=
"server"
ID
=
"ContactsPageView"
>
<
telerik:RadGrid
ID
=
"ContactsGrid"
runat
=
"server"
AllowSorting
=
"false"
AllowFilteringByColumn
=
"false"
PageSize
=
"5"
AllowPaging
=
"true"
AutoGenerateColumns
=
"False"
GridLines
=
"None"
onneeddatasource
=
"ContactsGrid_NeedDataSource"
>
<
ClientSettings
AllowColumnsReorder
=
"True"
ReorderColumnsOnClient
=
"True"
AllowDragToGroup
=
"True"
>
<
Selecting
AllowRowSelect
=
"True"
/>
</
ClientSettings
>
<
MasterTableView
DataKeyNames
=
"ContactId"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"ContactId"
HeaderText
=
"Id"
UniqueName
=
"ContactId"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Full Name"
DataField
=
"FullName"
UniqueName
=
"FullName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Position"
DataField
=
"Position"
UniqueName
=
"Position"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Contact Type"
DataField
=
"ContactType.Description"
UniqueName
=
"ContactType"
>
</
telerik:GridBoundColumn
>
<
telerik:GridHyperLinkColumn
DataNavigateUrlFields
=
"Email"
DataNavigateUrlFormatString
=
"mailto:{0}"
DataTextField
=
"Email"
HeaderText
=
"Email"
UniqueName
=
"Email"
Groupable
=
"false"
AllowFiltering
=
"false"
>
</
telerik:GridHyperLinkColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Phone"
DataField
=
"Phone"
UniqueName
=
"Phone"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Mobile"
DataField
=
"Mobile"
UniqueName
=
"Mobile"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
<
telerik:RadPageView
runat
=
"server"
ID
=
"AddressesPageView"
>
<
telerik:RadGrid
ID
=
"AddressesGrid"
runat
=
"server"
AllowSorting
=
"false"
AllowFilteringByColumn
=
"false"
PageSize
=
"5"
AllowPaging
=
"true"
AutoGenerateColumns
=
"False"
GridLines
=
"None"
onneeddatasource
=
"AddressesGrid_NeedDataSource"
>
<
ClientSettings
AllowColumnsReorder
=
"True"
ReorderColumnsOnClient
=
"True"
AllowDragToGroup
=
"True"
>
<
Selecting
AllowRowSelect
=
"True"
/>
</
ClientSettings
>
<
MasterTableView
DataKeyNames
=
"AddressId"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"AddressId"
HeaderText
=
"Id"
UniqueName
=
"AddressId"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Address Type"
DataField
=
"AddressType"
UniqueName
=
"AddressType"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Full Address"
DataField
=
"FullAddress"
UniqueName
=
"FullAddress"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Zip Code"
DataField
=
"ZipCode"
UniqueName
=
"ZipCode"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"City"
DataField
=
"City"
UniqueName
=
"City"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Province"
DataField
=
"Province"
UniqueName
=
"Province"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Country"
DataField
=
"Country"
UniqueName
=
"Country"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
</
asp:Panel
>
</
NestedViewTemplate
>
<
Columns
>
<
telerik:GridButtonColumn
ButtonType
=
"ImageButton"
Reorderable
=
"False"
Resizable
=
"False"
ShowFilterIcon
=
"False"
ShowSortIcon
=
"False"
UniqueName
=
"EditButton"
ImageUrl
=
"~/Images/Edit.png"
CommandName
=
"Edit"
>
<
ItemStyle
Width
=
"20px"
HorizontalAlign
=
"Center"
VerticalAlign
=
"Middle"
/>
</
telerik:GridButtonColumn
>
<
telerik:GridImageColumn
AllowFiltering
=
"False"
AllowSorting
=
"False"
DataAlternateTextField
=
"Name"
DataImageUrlFields
=
"Logo"
DataImageUrlFormatString
=
"~/Images/Customers/{0}"
Groupable
=
"False"
HeaderText
=
"Logo"
ImageHeight
=
"64px"
ImageWidth
=
"64px"
ShowSortIcon
=
"False"
UniqueName
=
"Logo"
ItemStyle-Width
=
"75px"
>
<
ItemStyle
Width
=
"75px"
/>
</
telerik:GridImageColumn
>
<
telerik:GridBoundColumn
DataField
=
"CustomerId"
HeaderText
=
"Id"
UniqueName
=
"CustomerId"
Visible
=
"false"
AllowFiltering
=
"False"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Name"
HeaderText
=
"Name"
UniqueName
=
"Name"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"Contains"
>
</
telerik:GridBoundColumn
>
<
telerik:GridHyperLinkColumn
DataNavigateUrlFields
=
"Web"
DataNavigateUrlFormatString
=
"{0}"
DataTextField
=
"Web"
HeaderText
=
"Web"
UniqueName
=
"Web"
Target
=
"_blank"
Groupable
=
"false"
AllowFiltering
=
"false"
>
</
telerik:GridHyperLinkColumn
>
<
telerik:GridBoundColumn
DataField
=
"Group.Name"
HeaderText
=
"Group"
UniqueName
=
"Group"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"Contains"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"AccountManager.FullName"
HeaderText
=
"Acct. Manager"
UniqueName
=
"AccountManager"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"Contains"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"SIC.Description"
HeaderText
=
"SIC"
UniqueName
=
"SIC"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"Contains"
>
</
telerik:GridBoundColumn
>
<
telerik:GridCheckBoxColumn
DataField
=
"IsProspect"
HeaderText
=
"Prospect"
UniqueName
=
"IsProspect"
AutoPostBackOnFilter
=
"true"
CurrentFilterFunction
=
"EqualTo"
>
</
telerik:GridCheckBoxColumn
>
<
telerik:GridButtonColumn
ButtonType
=
"ImageButton"
Reorderable
=
"False"
Resizable
=
"False"
ShowFilterIcon
=
"False"
ShowSortIcon
=
"False"
UniqueName
=
"DeleteButton"
ImageUrl
=
"~/Images/Delete.png"
CommandName
=
"Delete"
ConfirmDialogType
=
"RadWindow"
ConfirmText
=
"Are you sure you want to delete this record?"
ConfirmTitle
=
"Delete record..."
ConfirmDialogHeight
=
"130px"
>
<
ItemStyle
Width
=
"20px"
HorizontalAlign
=
"Center"
VerticalAlign
=
"Middle"
/>
</
telerik:GridButtonColumn
>
</
Columns
>
</
MasterTableView
>
<
PagerStyle
Mode
=
"NextPrevAndNumeric"
Position
=
"Bottom"
/>
<
HeaderContextMenu
EnableImageSprites
=
"True"
CssClass
=
"GridContextMenu GridContextMenu_Default"
></
HeaderContextMenu
>
</
telerik:RadGrid
>
</
asp:Content
>
Code Behind for binding:
#region Binding
// Bind main grid
protected
void
ListGrid_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
ListGrid.DataSource = BindControls();
}
protected
IEnumerable<Customer> BindControls()
{
var customers = customersRepository.GetAllCustomers();
return
customers;
}
// Bind contacts grid
protected
void
ContactsGrid_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
(sender
as
RadGrid).DataSource = BindContactsControls();
}
protected
IEnumerable<Contact> BindContactsControls()
{
var contacts = contactsRepository.GetContactsByCustomer(System.Convert.ToInt32(CurrentRecordId));
return
contacts;
}
// Bind addresses grid
protected
void
AddressesGrid_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
(sender
as
RadGrid).DataSource = BindAddressesControls();
}
protected
IEnumerable<Address> BindAddressesControls()
{
var addresses = addressesRepository.GetAddressesByCustomer(System.Convert.ToInt32(CurrentRecordId));
return
addresses;
}
#endregion
And this is the code for Customers repository:
using
System.Linq;
using
System.Transactions;
using
System.Data;
namespace
Quasar.Repository
{
public
class
CustomersRepository
{
// Create data context
private
QuasarEntities entities =
new
QuasarEntities();
// Retrieve all Customers
public
IQueryable<Customer> GetAllCustomers()
{
return
entities.Customers.OrderBy(o => o.Name);
}
// Retrieve a Customer by Id
public
Customer GetCustomer(
int
id)
{
return
entities.Customers.FirstOrDefault(d => d.CustomerId == id);
}
// Add Customer
public
int
Add(Customer customer)
{
using
(TransactionScope transaction =
new
TransactionScope())
{
try
{
entities.Customers.AddObject(customer);
entities.SaveChanges();
// Commit Transaction
transaction.Complete();
return
customer.CustomerId;
}
catch
{
return
0;
}
}
}
// Delete Customer
public
bool
Delete(Customer customer)
{
using
(TransactionScope transaction =
new
TransactionScope())
{
try
{
// Delete Customer and childs
entities.Customers.DeleteObject(customer);
entities.SaveChanges();
// Commit Transaction
transaction.Complete();
return
true
;
}
catch
{
return
false
;
}
}
}
// Persistence
public
bool
Save()
{
using
(TransactionScope transaction =
new
TransactionScope())
{
try
{
entities.SaveChanges();
// Commit Transaction
transaction.Complete();
return
true
;
}
catch
{
return
false
;
}
}
}
}
}
Please, any help?
Regards
Jose