Hi danill
Finally i do the functionality ,please review my code and suggest me is there any room for modification.and now you please help me with some css, for look and fill like
Tri-state checkboxes (CheckChildren=True)
also after page load how I make the selection?
public class checkcolumnController : Controller
{
//
// GET: /checkcolumn/
public ActionResult Index()
{
return View();
}
private NodeCollection data()
{
List<module> mod = module.GenarateModule();
List<submodule> submod = submodule.GenarateSubModule();
List<menu> mnu = menu.GenarateMenu();
NodeCollection n = new NodeCollection();
Node n_mod = null;
Node n_submod = null;
Node n_menu = null;
foreach (module obj_mod in mod)
{
var v_submod = submod.FindAll(item => item.moduleid == obj_mod.moduleid);
n_mod = new Node();
n_mod.Icon = Icon.Folder;
n_mod.Expanded = false;
n_mod.AttributesObject =
new
{
moduleid = obj_mod.moduleid,
name = obj_mod.modulename
};
foreach (submodule obj_submodule in v_submod)
{
var v_menu = mnu.FindAll(item => item.submoduleid == obj_submodule.submoduleid);
n_submod = new Node();
n_submod.Icon = Icon.Folder;
n_submod.Expanded = false;
n_submod.AttributesObject =
new
{
submoduleid = obj_submodule.submoduleid,
name = obj_submodule.submodulename
};
foreach (menu obj_menu in v_menu)
{
n_menu = new Node();
n_menu.Icon = Icon.Folder;
// n_menu.Expanded = true;
n_menu.Leaf = true;
n_menu.AttributesObject =
new
{
menuid = obj_menu.menuid,
name = obj_menu.menuname,
p1 = obj_menu.p1,
p2 = obj_menu.p2,
p3 = obj_menu.p3,
p4 = obj_menu.p4
};
n_submod.Children.Add(n_menu);
}
n_mod.Children.Add(n_submod);
}
n.Add(n_mod);
}
return n;
}
public ActionResult genaratemenuajax(string node)
{
if (node == "Root")
{
return this.Content(data().ToJson());
}
return new HttpStatusCodeResult((int)System.Net.HttpStatusCode.BadRequest);
}
}
public class module
{
public int moduleid { get; set; }
public string modulename { get; set; }
public static List<module> GenarateModule()
{
List<module> l = new List<module>();
for (int i = 1; i <= 2; i++)
{
var v = new module();
v.moduleid = i;
v.modulename = "Module " + i.ToString();
l.Add(v);
}
return l;
}
}
public class submodule
{
public int moduleid { get; set; }
public int submoduleid { get; set; }
public string submodulename { get; set; }
public static List<submodule> GenarateSubModule(int modid = 10)
{
List<submodule> l = new List<submodule>();
for (int j = 1; j <= modid; j++)
{
for (int i = 1; i <= 2; i++)
{
var v = new submodule();
v.moduleid = j;
v.submoduleid = i;
v.submodulename = "SubModule " + i.ToString();
l.Add(v);
}
}
return l;
}
}
public class menu
{
public int menuid { get; set; }
public int submoduleid { get; set; }
public string menuname { get; set; }
public bool p1 { get; set; }
public bool p2 { get; set; }
public bool p3 { get; set; }
public bool p4 { get; set; }
public static List<menu> GenarateMenu(int submodid = 10)
{
List<menu> l = new List<menu>();
for (int j = 1; j <= submodid; j++)
{
for (int i = 1; i <= 3; i++)
{
var v = new menu();
v.submoduleid = j;
v.menuid = i;
v.menuname = "Menu " + i.ToString();
v.p1 = true;
v.p2 = false;
v.p3 = true;
v.p4 = true;
l.Add(v);
}
}
return l;
}
}
@{
var X = Html.X();
}
<script>
var onCheckColumnChange = function (obj, node) {
if (!node.locked) {
node.locked = true;
if (node.hasChildNodes()) {
node.cascadeBy(function (childNode) {
childNode.set(obj.dataIndex, node.data[obj.dataIndex]);
});
}
}
node.locked = false;
rec(obj, node)
}
var rec = function (obj, node) {
var ichildCount = node.parentNode.childNodes.length;
var iCheckCount = 0;
node.parentNode.eachChild(function (scope, args) {
if (scope.data[obj.dataIndex] == true) {
iCheckCount++;
}
else if (scope.data[obj.dataIndex] == false) {
}
})
if (ichildCount == iCheckCount) {
node.parentNode.set(obj.dataIndex, true);
}
else {
node.parentNode.set(obj.dataIndex, false);
}
if (node.parentNode.internalId != "Root") {
rec(obj, node.parentNode)
}
}
</script>
@X.ResourceManager()
@( X.TreePanel()
.ID("tp")
.Title("Core Team Projects")
.Width(500)
.Height(300)
.Collapsible(true)
.UseArrows(true)
.RootVisible(false)
.MultiSelect(true)
.SingleExpand(false)
.FolderSort(true)
.Store
(
X.TreeStore()
.ID("ts")
.Root(X.Node().Expanded(true).NodeID("Root"))
.Proxy
(
X.AjaxProxy()
.Url(Url.Action("genaratemenuajax"))
)
.Model(
X.Model()
.Fields(
X.ModelField().Name("moduleid"),
X.ModelField().Name("submoduleid"),
X.ModelField().Name("menuid"),
X.ModelField().Name("name"),
X.ModelField().Name("p1").Type(ModelFieldType.Boolean),
X.ModelField().Name("p2").Type(ModelFieldType.Boolean),
X.ModelField().Name("p3").Type(ModelFieldType.Boolean),
X.ModelField().Name("p4").Type(ModelFieldType.Boolean)
)
)
)
.ColumnModel(
X.TreeColumn()
.Text("Name")
.Flex(1)
.DataIndex("name")
,
X.CheckColumn()
.Text("P1")
.DataIndex("p1")
.Width(40)
.Editable(true)
.StopSelection(false)
.Listeners(l =>
{
l.CheckChange.Handler = "onCheckColumnChange(this, record);";
})
,
X.CheckColumn()
.Text("P2")
.DataIndex("p2")
.Width(40)
.Editable(true)
.StopSelection(false)
.Listeners(l =>
{
l.CheckChange.Handler = "onCheckColumnChange(this, record);";
})
,
X.CheckColumn()
.Text("P3")
.DataIndex("p3")
.Width(40)
.Editable(true)
.StopSelection(false)
.Listeners(l =>
{
l.CheckChange.Handler = "onCheckColumnChange(this, record);";
}),
X.CheckColumn()
.Text("P4")
.DataIndex("p4")
.Width(40)
.Editable(true)
.StopSelection(false)
.Listeners(l =>
{
l.CheckChange.Handler = "onCheckColumnChange(this, record);";
})
)
)