i have a hierarchical grid..
root grid displays the companys, and the child grid displays the users.
the class company is described by idcompany,name.
the class users is discribed by iduser,name, idcompany..
is it possible when adding a user programatically add in the correct grid,,
like get the reference of the father row by giving the id, then get the reference of the child grid, and then add the row user?
Thanks
Hello Hugo,
I am glad that you've manage to get it working.
Thank you for using our controls.
i could use the api, but in this case, i want to open a dialogbox on the click of a button, on that dialog box i have got some fields describing the user, and i want to select through a dropdown combobox the company where this user belongs...and the press save button..
i manage to get it working..
Hello,
Please feel free to contact us if you need any further assistance with this matter
Thank you for contacting us.
Can I ask you, why don't you use the API that already exists for adding, deleting and updating rows? Your explanation was little confusing, if you explain me why you want to use separate buttons for these operation, I may suggest you something else.
Looking forward to hearing from you.
so i manage to get it working somehow, but still i am having some problems..
it is possible to add a user to a chosen company, but the problem now is that after i do the commit and the savechanges it doesnt detect the add row user...
i have pagging and sorting , and filtering define on the grid
what i do is loop throught the all rows of the grid, then i try to find the id of the row that matches the id of the comapny.
then i expand that row..
after i do that i fetch all childrens, i do this because there mighty be more that one subgrid open.
when i loop through the subgrids i fecth the id of the father and compare to the id of company, then i add the row user..
this is working but after i call the savechanges method it doesnt detect the transactions..
is it possible doing this way , or should i use the api that already exists...
in my page i have 4 buttons on top of the grid..one for add user, one for add company, one for confiming the delete, and another rollback.
add user call a igdialog with the fields username,password, name and the company(this is a igcombo with the key refering to the id of the company, and the value refering to the name of the company )
i forgot to mention that the add company is working fine, and after i call save changes it detects the changes..
here is my code for the add user botton:
var indexPag = 0; var dataRow = 0; var found = 0; var i = 0; var ParteDecimal = 0;
var iRecordCount = $("#Grid_Utilizadores_By_Empresa").igGrid("totalRecordsCount");var iPageSize = $("#Grid_Utilizadores_By_Empresa").igGridPaging("pageSize");var resDivisao = iRecordCount % iPageSize;ParteDecimal = parseInt(iRecordCount / iPageSize);if (resDivisao > 0) ParteDecimal++; $("#Grid_Utilizadores_By_Empresa").igGridPaging("pageIndex", 0); for (i = 0; i < ParteDecimal; i++) { if (found == 0) { var Rows = $("#Grid_Utilizadores_By_Empresa").igGrid("allRows"); $.each(Rows, function (ix, row) { rowId = $(row).attr("data-id"); alert("rowId:" + rowId); alert("idermpresa:" + IDEmpresa); if (rowId == IDEmpresa) { dataRow = $(row).attr("data-row-idx"); alert("dataRow:" + dataRow); found = 1; $("#DialogBox_AddOrEdit_Utilizador").igDialog("close"); var parentGrid = $("#Grid_Utilizadores_By_Empresa").igHierarchicalGrid("rootWidget"), rowDomElement = parentGrid.allRows()[dataRow]; $("#Grid_Utilizadores_By_Empresa").igHierarchicalGrid("expand", rowDomElement);
} }); if(found==0) $("#Grid_Utilizadores_By_Empresa").igGridPaging("pageIndex", i+1);
} alert("found:" + found);
} var childGrids = $("#Grid_Utilizadores_By_Empresa").igHierarchicalGrid("allChildren"); $.each(childGrids, function (ix, grid) { var id = $(grid).closest("tr").prev().attr("data-id"); //alert("gridid:" + id); if(id==IDEmpresa) $(grid).igGridUpdating("addRow", { Nome: "Milk", UserName: "saasa" }); $("#Grid_Utilizadores_By_Empresa").igHierarchicalGrid("commit"); $("#Grid_Utilizadores_By_Empresa").igHierarchicalGrid("saveChanges"); });
here is the code descibing the model on controller
public ActionResult Index() { //initializar o model da grid GridModel grid = CreateGridModel(); return View(grid); } // Take grid creation outside as it will be used in all methods: private GridModel CreateGridModel() { GridModel grid = new GridModel(); // definir propriadades e as colunas grid.AutoGenerateColumns = false; grid.Columns = new List(); grid.Columns.Add(new GridColumn("IDEmpresa", "IDEmpresa", "number", "0px")); grid.Columns.Add(new GridColumn("Nome da Empresa", "NomeEmpresa", "string", "200px")); grid.Columns.Add(new GridColumn("Nif", "Nif", "string", "100px")); grid.Columns.Add(new GridColumn("Tipo", "Tipo", "string", "100px"));
//multicolumns header GridColumn group = new GridColumn(); group.HeaderText = "Criada Por:"; group.Group = new List(); group.Group.Add(new GridColumn("Utilizador", "CriadaPeloIDU", "string", "100px")); group.Group.Add(new GridColumn("Empresa:", "CriadaPeloIDUDaEmpresa", "string", "100px")); grid.Columns.Add(group); //add feature grid.Features.Add(new GridMultiColumnHeaders() { Inherit = true }); grid.PrimaryKey = "IDEmpresa"; grid.AutoGenerateLayouts = false; // Criar layout da subgrid GridColumnLayoutModel layout = new GridColumnLayoutModel(); layout.Key = "Utilizadores"; layout.PrimaryKey = "UserId"; layout.AutoGenerateColumns = false; layout.Columns = new List(); layout.Columns.Add(new GridColumn("UserId", "UserId", "number", "0px")); layout.Columns.Add(new GridColumn("Username", "UserName", "string", "100px")); layout.Columns.Add(new GridColumn("Nome", "Nome", "string", "100px")); //multicolumns header GridColumn groupChild = new GridColumn(); groupChild.HeaderText = "Criada Por:"; groupChild.Group = new List(); groupChild.Group.Add(new GridColumn("Utilizador", "CriadoPeloIDU", "string", "100px")); groupChild.Group.Add(new GridColumn("Empresa:", "CriadoPeloIDUDaEmpresa", "string", "100px")); layout.Columns.Add(groupChild);
// Adicionar paging, filtering, updating a subgrid ////selection //GridSelection Selection = new GridSelection(); //Selection.Mode = SelectionMode.Row; //Selection.MultipleSelection = true; //layout.Features.Add(Selection); ////row selectors checkbox //GridRowSelectors ChkSelection = new GridRowSelectors(); //ChkSelection.EnableCheckBoxes = true; //ChkSelection.EnableRowNumbering = false; //layout.Features.Add(ChkSelection); //filtering GridFiltering layoutFiltering = new GridFiltering(); layoutFiltering.Type = OpType.Remote; layout.Features.Add(layoutFiltering);
//paging GridPaging layoutPaging = new GridPaging(); layoutPaging.VisiblePageCount = 2; layoutPaging.PageSize =10; layoutPaging.ShowPageSizeDropDown = false; layoutPaging.ShowPagerRecordsLabel = false; layoutPaging.Type = OpType.Remote; layout.Features.Add(layoutPaging); //Updating GridUpdating layoutUpdating = new GridUpdating(); layoutUpdating.EnableAddRow = false; layoutUpdating.EnableDeleteRow = true; layoutUpdating.EditMode = GridEditMode.None; layout.Features.Add(layoutUpdating);
//adicionar o laytout da subgrid a grid grid.ColumnLayouts.Add(layout);
//most importantly turn Load On demand on and define response Urls: grid.LoadOnDemand = true; grid.DataSourceUrl = this.Url.Action("BindParent"); grid.ColumnLayouts[0].DataSourceUrl = this.Url.Action("BindChild"); grid.UpdateUrl = Url.Action("EditingSaveChanges"); ////selection //GridSelection SelectionRoot = new GridSelection(); //SelectionRoot.Mode = SelectionMode.Row; //SelectionRoot.MultipleSelection = true; //grid.Features.Add(SelectionRoot); ////row selectors checkbox //GridRowSelectors ChkSelectionRoot = new GridRowSelectors(); //ChkSelectionRoot.EnableCheckBoxes = true; //ChkSelectionRoot.EnableRowNumbering = false; //grid.Features.Add(ChkSelectionRoot); //sorting GridSorting sorting = new GridSorting(); sorting.Type = OpType.Remote; grid.Features.Add(sorting); //paging GridPaging paging = new GridPaging(); paging.PageSize = 10; paging.ShowPageSizeDropDown = false; paging.ShowPagerRecordsLabel = false; paging.Type = OpType.Remote; grid.Features.Add(paging); //updating GridUpdating Updating = new GridUpdating(); Updating.EnableAddRow = false; Updating.EnableDeleteRow = true; Updating.EditMode = GridEditMode.None; grid.Features.Add(Updating); //filtering GridFiltering filtering = new GridFiltering(); filtering.Type = OpType.Remote; grid.Features.Add(filtering); //And lastly set ID so the client widget can be normally interacted with (see the events in the view) grid.ID = "Grid_Utilizadores_By_Empresa"; // Return the finished model return grid; }
public JsonResult BindParent() { MvcIdonic DB = new MvcIdonic(); //create a model GridModel grid = CreateGridModel(); //set its datasource //get the companys grid.DataSource = ListarEmpresas(); //and use the GetData() method to return the results return grid.GetData(); }
public JsonResult BindChild(string path, string layout) { MvcIdonic DB = new MvcIdonic(); //get id of the company from the path
string[] arrSplitVarPath = path.Split(':'); int IDEmpresa = Int32.Parse(arrSplitVarPath[1]); //create a model GridModel grid = CreateGridModel(); //set its datasource //get user data grid.DataSource = ListarUtilizadoresByIDEmpresa(IDEmpresa); // grid.DataSource = (from UProfile in DB.UserProfiles orderby (UProfile.UserId) select (UProfile)); //and use the GetData() method to return the results return grid.GetData(path, layout); }
and here is the update function
[ActionName("EditingSaveChanges")] public ActionResult EditingSaveChanges() { MvcIdonic DB = new MvcIdonic(); GridModel m = new GridModel(); JsonResult result = new JsonResult(); Dictionary response = new Dictionary(); List<Transaction> categoryTransactions = m.LoadTransactions(HttpContext.Request.Form["ig_transactions"]); foreach (Transaction t in categoryTransactions) { if (t.layoutKey == null) { if (t.type == "deleterow") { } else if (t.type == "newrow") { bool contactExists = DB.Empresas.Any(Emp => Emp.NomeEmpresa.Equals(t.row.NomeEmpresa) && Emp.Rem == 0); if (contactExists) { response.Add("Success", 2); } else if (DB.Empresas.Any(Emp => Emp.NIF == t.row.Nif && t.row.Nif != "")) { response.Add("Success", 3); }
else { Empresa Emp = new Empresa(); Emp.NomeEmpresa = t.row.NomeEmpresa; Emp.NIF = t.row.Nif;
Emp.TipoCliente = GetIDDescTipo(t.row.Tipo); Emp.TStamp = GetDateTimeFromSqlSytem(); Emp.IDU = WebSecurity.CurrentUserId; DB.Empresas.Add(Emp); DB.SaveChanges(); response.Add("Success",1); } }
} } List<Transaction> productTransactions = m.LoadTransactions(HttpContext.Request.Form["ig_transactions"]); foreach (Transaction t in productTransactions) { if (t.layoutKey == "Utilizadores") { if (t.type == "deleterow") { } else if (t.type == "row") { } } } result.Data = response; return result; }
I cant resolve the problem,,,i have change the code and tryed again...nothing..
i cant found any info about this problem...
i am gona create a ajax call to add the user...it is not the best way, but i cant loose more time for now in this one problem...
if anyone knows what might be the problem, do tell me...
i had changed the code by enabling add row in both parent and child row..what happens is that if i had a user then add a company it detects both transaction, if i add only a comapny, it detects, if add only user it does nothing..
i think i am not declaring the model in the rigth way..
so please tell me what the problem is...