Hi Daniil,
Thanks for your response, I set the IDProperty and The SelectionMemory and SelectionSubmit are active.
To produce the bug
1- A client side grid that it's inherited from Ext.grid.Panel with no overriden methods, just some simple methods are added.
2- A control that it's inherited from GridPanel with overriden XType and InstanceOf and Resources for client side grid and in OnLoad method of inherited control I build the Model, Store , PageProxy,CheckBoxSelectionRowModel and ColumnModel for grid.
3- create an user control that contains an instance of grid.
4-create a page that contains the user control.
1-
Grid.js
Ext.define('Test.Ux.Grid.MyGrid', {
extend: 'Ext.grid.Panel',
alias: 'widget.mygrid',
refresh: function() {
var me = this, store = me.getStore();
store.load({ callback: function() { me.getView().refresh(); } });
},
onSelectionChange: function (s, selected) {
var hasSelected = selected && selected.length > 0;
var editBtn = this.down("#GetC");
if (editBtn) editBtn.setDisabled(!hasSelected);
},
showCount : function() {
Test[this.id].ShowCount();
},
});
2.
My Grid
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Ext.Net;
namespace SelectionGridTest.Grid
{
public class MyGrid : GridPanel
{
public override string InstanceOf
{
get { return "Test.Ux.Grid.MyGrid"; }
}
public override string XType
{
get { return "mygrid"; }
}
protected override void OnLoad(EventArgs e)
{
Frame = true;
Title = "Test";
Layout = "Fit";
Region = Region.Center;
ColumnLines = true;
TabMenuHidden = true;
Height = 500;
var store = new Store
{
ID = ID + "St",
PageSize = 3,
AutoLoad = false,
RemoteSort = true,
RemoteFilter = true,
IsPagingStore = true,
RemoteGroup = true,
RemotePaging = true,
Model = { new Model()
{
ID = ID+"Mdl",
IDProperty = "test",
Fields = {new ModelField("test", ModelFieldType.Auto)}
}
},
Proxy = { new PageProxy(){IDParam="prx"} },
};
//IsPagingStore ??
// store.CustomConfig.Add(new ConfigItem("isPagingStore", "true", ParameterMode.Raw));
store.ReadData += Store_ReadData;
Bin.Add(store);
StoreID = store.ID;
View.Add(new Ext.Net.GridView
{
ID = ID + "Vw",
StripeRows = true,
});
//
ColumnModel.Columns.Add(new Column() {ID = "col1", DataIndex = "test", Text = "Test" });
SelectionModel.Add(new CheckboxSelectionModel() {ID ="csm", CheckOnly = true,PruneRemoved = false,Mode = SelectionMode.Multi});
var cButton = new Button("Get Count");
cButton.ID = "GetC";
cButton.Disabled = true;
cButton.Listeners.Click.Handler = "item.up('grid').showCount();";
// cButton.DirectEvents.Click.Event += GetCount;
TopBar.Add(new Toolbar()
{
ID = "TLb",
Items = {new Button("Refresh","item.up('grid').refresh();"){ID = "Refb"},
cButton}
});
BottomBar.Add(new PagingToolbar() { ID = "PP"});
RegisterDirectMethods();
if (!Ext.Net.X.IsAjaxRequest)
{
CustomConfig.Add(new ConfigItem("formControl", "test", ParameterMode.Value));
Listeners.SelectionChange.Handler = "this.onSelectionChange(this, selected);";
}
var filterMenu = new GridFilters { ID = ID+"F" + "Mnfil", AutoReload = false};
filterMenu.Filters.Add(new StringFilter() { DataIndex = "test" });
Features.Add(filterMenu);
}
public List<object> MyData = new List<object>
{
new { test = "test1" },
new { test = "test2" },
new { test = "test3" },
new { test = "test4" },
new { test = "test5" },
new { test = "test6" },
new { test = "test7" },
new { test = "test8" },
new { test = "test9" }
};
private void RegisterDirectMethods()
{
ResourceManager.DirectMethodNamespace = "Test";
ResourceManager.AddDirectMethodControl(this);
}
protected void Store_ReadData(object sender, StoreReadDataEventArgs e)
{
List<object> data = this.MyData;
var limit = e.Limit;
if ((e.Start + e.Limit) > data.Count)
{
limit = data.Count - e.Start;
}
List<object> rangeData = (e.Start < 0 || limit < 0) ? data : data.GetRange(e.Start, limit);
e.Total = data.Count;
(sender as Store).DataSource = rangeData;
(sender as Store).DataBind();
}
[DirectMethod()]
public void ShowCount()
{
Ext.Net.X.Msg.Alert("GetCount", (GetSelectionModel() as RowSelectionModel).SelectedRows.Count).Show();
}
protected void GetCount(object sender, DirectEventArgs e)
{
Ext.Net.X.Msg.Alert("GetCount", (GetSelectionModel() as RowSelectionModel).SelectedRows.Count).Show();
}
protected override List<ResourceItem> Resources
{
get
{
var resources = base.Resources;
resources.Capacity += 1;
resources.Add(new ClientScriptItem(typeof(MyGrid), "SelectionGridTest.Resources.MyGrid.js", ""));
return resources;
}
}
}
}
3.
TestUC User Control
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestUC.ascx.cs" Inherits="SelectionGridTest.TestUC" %>
<%@ Register TagPrefix="ext" Namespace="SelectionGridTest.Grid" Assembly="SelectionGridTest" %>
<ext:MyGrid ID="grd" runat="server"></ext:MyGrid>
4.
TestPage.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="SelectionGridTest.Test" %>
<%@ Register TagPrefix="ext" Namespace="Ext.Net" Assembly="Ext.Net, Version=2.1.1.18167, Culture=neutral, PublicKeyToken=2e12ce3d0176cd87" %>
<%@ Register TagPrefix="ext" Namespace="SelectionGridTest.Grid" Assembly="SelectionGridTest" %>
<%@ Register Src="~/TestUC.ascx" TagPrefix="uc1" TagName="TestUC" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<div>
<uc1:TestUC runat="server" id="TestUC" />
</div>
</form>
</body>
</html>
The custom control works fine but when i use the custom grid in an user control it doesn't work.
You can find the sample code to produce the problem.
Regards,
Corey