Mar 23, 2016, 2:19 AM
[FIXED] [#1295] [4.1.0] Grouping breaks when data is reloaded
On the following sample proceed through the following steps:
Notice that both groups have been "destroyed".
Thanks in advance
- Expand group Owner: raphael - Count: 8
- Expand group Owner: saldanha - Count: 7
- Press PagingToolbar's reload button
- Collapse group Owner: raphael - Count: 8
- Collapse group Owner: saldanha - Count: 7
Notice that both groups have been "destroyed".
Thanks in advance
<!DOCTYPE html>
<html>
<head runat="server">
</head>
<body>
<ext:ResourceManager Theme="Crisp" ScriptMode="Debug" runat="server" />
<ext:GridPanel Title="Ext.Net" Width="700" Height="500" Region="Center" runat="server">
<Features>
<ext:Grouping runat="server" HideGroupedHeader="true" StartCollapsed="true" GroupHeaderTplString='{columnName}: {name} - Count: {rows.length}' />
</Features>
<Store>
<ext:Store AutoLoad="true" RemoteSort="true" RemoteFilter="true" RemotePaging="true" GroupField="Owner" runat="server">
<Proxy>
<ext:AjaxProxy Url="~/Example/LoadFakeRecords/" SortParam="sort">
<Reader>
<ext:JsonReader RootProperty="data" />
</Reader>
</ext:AjaxProxy>
</Proxy>
<Model>
<ext:Model IDProperty="ID" runat="server">
<Fields>
<ext:ModelField Name="ID" Type="String" />
<ext:ModelField Name="Name" Type="String" />
<ext:ModelField Name="Owner" Type="String" />
</Fields>
</ext:Model>
</Model>
<Sorters>
<ext:DataSorter Property="Owner" Direction="ASC" />
</Sorters>
</ext:Store>
</Store>
<ColumnModel runat="server">
<Columns>
<ext:Column Text="ID" DataIndex="ID" runat="server" />
<ext:Column Text="Name" Flex="1" DataIndex="Name" runat="server" />
<ext:Column Text="Owner" DataIndex="Owner" runat="server" />
</Columns>
</ColumnModel>
<BottomBar>
<ext:PagingToolbar runat="server" />
</BottomBar>
</ext:GridPanel>
</body>
</html>
namespace SandBox.Controllers
{
public class ExampleController : System.Web.Mvc.Controller
{
public ActionResult Index() => View();
public StoreResult LoadFakeRecords(string sort)
{
List<Entity> lst = new List<Entity>();
for (int index = 0; index < 15; index++)
{
lst.Add(new Entity
{
ID = index,
Name = $"Name - {index}",
Owner = index % 2 == 0 ? "raphael" : "saldanha"
});
}
if (!string.IsNullOrWhiteSpace(sort))
{
lst = Sort(lst, sort);
}
return new StoreResult(lst, lst.Count);
}
private List<Entity> Sort(List<Entity> lst, string sort)
{
DataSorter sortDefinition = DataSorter.From(sort).FirstOrDefault();
var parameter = Expression.Parameter(typeof(Entity));
Func<Entity, Object> function = Expression.Lambda<Func<Entity, IComparable>>(Expression.Convert(Expression.Property(parameter, sortDefinition.Property), typeof(IComparable)), parameter).Compile();
if (sortDefinition.Direction == SortDirection.ASC)
{
return lst.OrderBy(function).ToList();
}
else
{
return lst.OrderByDescending(function).ToList();
}
}
}
public class Entity
{
public int ID { get; set; }
public string Name { get; set; }
public string Owner { get; set; }
}
}
Last edited by RaphaelSaldanha; May 12, 2016 at 2:31 PM.