/// <summary> /// Thủ tục thực hiện chuyển vị trí của Module đã chọn xuống 1 mức /// </summary> /// <param name="idx">Vị trí hiện thời</param> /// <param name="list">Danh sách Module</param> internal void MoveModuleDown(int idx, ModuleList list) { // Nạp cấu trúc Portal TemplateDefinition td = TemplateDefinition.Load(); // Lấy thông tin cột chứa Module hiện thời PortalDefinition.Column _objColumnContainer = td.GetColumn(list.ContainerColumnReference); // Lấy danh sách Module của cột ArrayList _arrModuleList = _objColumnContainer.ModuleList; // Nếu Module đang ở mức cuối cùng thì kết thúc thủ tục if (idx >= _arrModuleList.Count - 1) { return; } // Lấy thông tin Module hiện thời từ danh sách Module PortalDefinition.Module m = (PortalDefinition.Module)_arrModuleList[idx]; // Gỡ Module ra khỏi vị trí hiện thời _arrModuleList.RemoveAt(idx); // Chèn Module vào vị trí mới _arrModuleList.Insert(idx + 1, m); // Lưu cấu trúc Portal td.Save(); // Rebind LoadData(CurrentTemplateReference); ShowCurrentEditingColumn(); }
protected void btnBindModuleEditForm_Click(object sender, EventArgs e) { string tab = (string)ViewState["TabReference"]; PortalDefinition pd = PortalDefinition.Load(); PortalDefinition.Tab t = pd.GetTab(tab); string arg = Request.Form["pageArg"]; string moduleRef = string.Empty; string moduleType = string.Empty; string columnRef = string.Empty; string title = string.Empty; if (arg.Split("$".ToCharArray()).Length == 4) { moduleRef = arg.Split("$".ToCharArray())[0]; moduleType = arg.Split("$".ToCharArray())[1]; title = arg.Split("$".ToCharArray())[2]; columnRef = arg.Split("$".ToCharArray())[3]; } else { return; } PortalDefinition.Column column = pd.GetColumn(columnRef); if (moduleRef == null || moduleRef == string.Empty || moduleRef.ToLower() == "null") { module = PortalDefinition.Module.Create(); module.type = moduleType; module.title = title; moduleRef = module.reference; } else { module = new PortalDefinition.Module(); module.type = moduleType; module.title = title; module.reference = moduleRef; } if (module != null) { module.LoadModuleSettings(); module.LoadRuntimeProperties(); moduleSettings = module.moduleSettings; moduleRuntimeSettings = module.moduleRuntimeSettings; lblModuleType.Text = moduleType; txtReference.Text = module.reference; rptRuntimeProperties.DataSource = module.GetRuntimePropertiesSource(true); rptRuntimeProperties.DataBind(); upEditModuleForm.Update(); } }
/// <summary> /// Thủ tục thêm một Module mới /// </summary> /// <param name="_strColumnRef">Mã tham chiếu đến cột sẽ chứa Module</param> internal void AddModule(string _strColumnRef) { // Nạp cấu trúc portal TemplateDefinition td = TemplateDefinition.Load(); // Tìm cột sẽ chứa Module mới PortalDefinition.Column _objColumnContainer = td.GetColumn(_strColumnRef); if (_objColumnContainer != null) { // Tạo Module mới PortalDefinition.Module _objNewModule = PortalDefinition.Module.Create(); // Thêm Module mới vào danh sách Module của cột _objColumnContainer.ModuleList.Add(_objNewModule); // Lưu cấu trúc Portal td.Save(); // Nạp lại thông tin Tab hiện thời LoadData(CurrentTemplateReference); // Hiển thị form sửa thông tin Module EditModule(_objNewModule.reference); } }
HtmlTable genTable(PortalDefinition.Column column) { HtmlTable table = new HtmlTable(); table.Style["width"] = "100%"; HtmlTableRow trHeader = genHeaderTable(column); table.Controls.Add(trHeader); HtmlTableRow trContent = new HtmlTableRow(); // render column inside table if (column.Columns.Count == 0) { trContent.Controls.Add(genColumn(column)); } else { foreach (PortalDefinition.Column childColumn in column.Columns) { trContent.Controls.Add(genColumn(childColumn)); } } table.Controls.Add(trContent); return(table); }
/// <summary> /// Thủ tục lấy danh sách mã tham chiếu của tất cả các vùng có thể đặt khung (bên trong chứa Module) /// </summary> /// <param name="_arrColumns">Mảng chứa danh sách cột xuất phát</param> /// <param name="_strColumnContainerList"> /// Tham chiếu đến chuỗi chứa danh sách các mã tham chiếu cần lấy. /// Sử dụng StringBuilder để tiết kiệm bộ nhớ /// </param> private void GetContainerList(ArrayList _arrColumns, ref StringBuilder _strColumnContainerList) { // Nếu danh sách cột rỗng thì kết thúc hàm if (_arrColumns == null || _arrColumns.Count == 0) { return; } // Duyệt danh sách cột xuất phát for (int _intColumnCount = 0; _intColumnCount < _arrColumns.Count; _intColumnCount++) { // Tạo đối tượng đại diện cho cột đang xét PortalDefinition.Column _objColumn = (PortalDefinition.Column)_arrColumns[_intColumnCount]; if (_objColumn != null) { // Thêm mã tham chiếu của cột vào danh sách mã tham chiếu của các vùng có thể đặt khung // Thêm vào đầu danh sách để không phải đảo ngược lại danh sách // (Cần danh sách ngược do Snap Component bắt Docking theo cây Controls, // chỉ Dock được các điều khiển con sau đó mới đến điều khiển cha if (_strColumnContainerList.Length > 0) { _strColumnContainerList.Insert(0, ','); } _strColumnContainerList.Insert(0, _objColumn.ColumnReference.Replace('-', '_')); _strColumnContainerList.Insert(0, "Cell"); // Tiếp tục gọi đệ quy với các cột con của cột đang xét GetContainerList(_objColumn.Columns, ref _strColumnContainerList); } } }
void bindColumnProperties(HtmlTableCell cell, PortalDefinition.Column column) { cell.Attributes["_style"] = column.ColumnCustomStyle; cell.Attributes["level"] = column.ColumnLevel.ToString(); cell.Attributes["name"] = column.ColumnName; cell.Attributes["editablecolumnwidth"] = column.EditableColumnWidth.ToString(); cell.Attributes["ref"] = column.ColumnReference; cell.Style["width"] = getWidthForStyle(column.ColumnWidth); cell.Attributes["isdragable"] = column.IsDragable.ToString(); cell.Attributes["valign"] = "top"; }
private void ShowCurrentEditingColumn() { PortalDefinition pd = PortalDefinition.Load(); PortalDefinition.Column _objCurrentColumn = pd.GetColumn(CurrentColumnReference); if (_objCurrentColumn != null) { EditColumn(_objCurrentColumn.ColumnReference); } }
private void ShowCurrentEditingParentColumn() { TemplateDefinition td = TemplateDefinition.Load(); PortalDefinition.Column _objCurrentColumn = td.GetColumn(CurrentColumnReference); if (_objCurrentColumn != null && _objCurrentColumn.ColumnParent != null) { EditColumn(_objCurrentColumn.ColumnParent.ColumnReference); } }
public void LoadData(string _strColumnRef) { PortalDefinition _objPortal = PortalDefinition.Load(); PortalDefinition.Column _objColumn = _objPortal.GetColumn(_strColumnRef); if (_objColumn != null) { moduleList = _objColumn.ModuleList; Bind(); } }
void saveColumn(ref PortalDefinition.Column column, XmlNode htmlColumn, int level) { column.ColumnLevel = level; string reference = xmlNodeToText(htmlColumn.SelectSingleNode("@ref")); if (!string.IsNullOrEmpty(reference)) { column.ColumnReference = reference; } column.ColumnName = xmlNodeToText(htmlColumn.SelectSingleNode("@name")); column.ColumnCustomStyle = xmlNodeToText(htmlColumn.SelectSingleNode("@_style")); column.ColumnWidth = getWidthFromStyle(xmlNodeToText(htmlColumn.SelectSingleNode("@style"))); column.IsDragable = xmlNodeToText(htmlColumn.SelectSingleNode("@isdragable")).ToLower() == "true"; XmlNodeList htmlModules = htmlColumn.SelectNodes("ul/li"); if (htmlModules.Count == 0) { htmlModules = htmlColumn.SelectNodes("ul/li".ToUpper()); // fix ie: UPPERCASE all tag } PortalDefinition.Module newModule; foreach (XmlNode htmlModule in htmlModules) { if (xmlNodeToText(htmlModule.SelectSingleNode("@class")) != "virtualElement") { newModule = PortalDefinition.Module.Create(); saveModule(ref newModule, htmlModule); column.ModuleList.Add(newModule); } } // save tables XmlNodeList htmlTables = htmlColumn.SelectNodes("table"); if (htmlTables.Count == 0) { htmlTables = htmlColumn.SelectNodes("TABLE"); } int countTable = 0; PortalDefinition.Column childColumn; foreach (XmlNode htmlTable in htmlTables) { childColumn = PortalDefinition.Column.Create(column); saveTable(ref childColumn, htmlTable, countTable++); column.Columns.Add(childColumn); } }
public void LoadColumnList(string _strColumnRef) { PortalDefinition _objPortal = PortalDefinition.Load(); PortalDefinition.Column _objColumn = _objPortal.GetColumn(_strColumnRef); if (_objColumn != null) { LoadColumnList(_objColumn.Columns); lnkAddColumn.Visible = false; lnkAddSubColumn.Visible = true; lnkAddSubColumn.CommandArgument = _objColumn.ColumnReference; lblColumnListTitle.LanguageRef = "SubColumnList"; } }
protected void OnDelete(object sender, EventArgs args) { if (Parent is Tab) { PortalDefinition pd = PortalDefinition.Load(); PortalDefinition.Tab t = pd.GetTab(CurrentTabReference); PortalDefinition.Column _objColumnBeingDeleted = pd.GetColumn(CurrentColumnReference); if (_objColumnBeingDeleted != null) { t.DeleteColumn(CurrentColumnReference); pd.Save(); if (Delete != null) { Delete(CurrentColumnReference, _objColumnBeingDeleted.ColumnParent == null ? Guid.NewGuid().ToString() : _objColumnBeingDeleted.ColumnReference); } } } else if (Parent is Template) { TemplateDefinition td = TemplateDefinition.Load(); TemplateDefinition.Template t = td.GetTemplate(CurrentTabReference); PortalDefinition.Column _objColumnBeingDeleted = td.GetColumn(CurrentColumnReference); if (_objColumnBeingDeleted != null) { t.DeleteColumn(CurrentColumnReference); td.Save(); if (Delete != null) { Delete(CurrentColumnReference, _objColumnBeingDeleted.ColumnParent == null ? Guid.NewGuid().ToString() : _objColumnBeingDeleted.ColumnReference); } } } // Hopefully we where redirected here! }
HtmlTableCell genColumn(PortalDefinition.Column column) { HtmlTableCell td = new HtmlTableCell(); bindColumnProperties(td, column); td.Attributes["class"] = "content"; // bind column control StringBuilder html = new StringBuilder(); html.Append("<div style=\"clear:both; margin:5px\">"); html.Append("<div style=\"float:left;\"><span>" + column.ColumnName + "</span></div>"); html.Append("<div style=\"float:right\"><a href=\"#\" class=\"arrow addtable\" title=\"Thêm bảng vào trong cột\" onclick=\"addTable(this); return false;\"></a>"); html.Append("<a href=\"#\" class=\"arrow edit\" title=\"Sửa thông tin cột\" onclick=\"ChangeColumnToEditMode(this); return false;\"></a>"); html.Append("<a href=\"#\" class=\"arrow moveleft\" title=\"Chuyển cột sáng trái\" onclick=\"moveColumnLeft(this); return false;\"></a>"); html.Append("<a href=\"#\" class=\"arrow moveright\" title=\"Chuyển cột sang phải\" onclick=\"moveColumnRight(this); return false;\"></a>"); html.Append("<a href=\"#\" class=\"arrow remove\" title=\"Xóa cột này\" onclick=\"removeColumn(this); return false;\"></a>"); html.Append("</div></div><br style=\"clear:both;\" />"); td.InnerHtml = html.ToString(); // render modules inside column HtmlGenericControl ul; if (column.ModuleList.Count == 0) { ul = genDragContainer(CountDragContainer++, VirtualSpace); } else { ul = genDragContainer(CountDragContainer++, string.Empty); } // td.Controls.Add(ul); foreach (PortalDefinition.Module module in column.ModuleList) { ul.Controls.Add(createModule(module)); } // render table inside column foreach (PortalDefinition.Column childColumn in column.Columns) { td.Controls.Add(genTable(childColumn)); } // return(td); }
/// <summary> /// Hàm nạp dữ liệu về một cột /// </summary> /// <param name="_strColumnRef">Mã tham chiếu của cột cần sửa</param> /// <param name="_strTabRef">Mã tham chiếu của Tab chứa cột</param> public void LoadData(string _strColumnRef, string _strTabRef) { PortalDefinition.Column _objColumn = null; if (Parent is Tab) { // Lấy thông tin về cột cần sửa PortalDefinition pd = PortalDefinition.Load(); _objColumn = pd.GetColumn(_strColumnRef); } else if (Parent is Template) { TemplateDefinition td = TemplateDefinition.Load(); _objColumn = td.GetColumn(_strColumnRef); } if (_objColumn != null) { // Hiển thị thông tin về cột txtTitle.Text = _objColumn.ColumnName; txtColWidth.Text = _objColumn.ColumnWidth.ToString(); ltrColumnReference.Text = _objColumn.ColumnReference; chkDefaultColumnWidth.Checked = _objColumn.ColumnWidth == ""; //txtColWidth.ReadOnly = _objColumn.ColumnWidth == ""; txtCustomStyle.Text = _objColumn.ColumnCustomStyle; // Nạp danh sách các cấp độ có thể có cho cột hiện thời drdColumnLevel.DataSource = LoadAvaiableColumnLevels(_objColumn); drdColumnLevel.DataBind(); drdColumnLevel.SelectedIndex = (drdColumnLevel.Items.FindByValue(_objColumn.ColumnLevel.ToString()) != null) ? drdColumnLevel.Items.IndexOf( drdColumnLevel.Items.FindByValue( _objColumn.ColumnLevel.ToString())) : 0; CurrentColumnReference = _strColumnRef; CurrentTabReference = _strTabRef; CurrentTemplateReference = _strTabRef; chkDefaultColumnWidth.Attributes.Add("onclick", txtColWidth.ClientID + ".readOnly = this.checked;"); } }
private static void getNewRef(PortalDefinition.Column column) { PortalDefinition portal = PortalDefinition.Load(); string newRef = string.Empty; foreach (PortalDefinition.Module m in column.ModuleList) { newRef = Guid.NewGuid().ToString(); while (PortalDefinition.Module.IsExist(newRef)) { newRef = Guid.NewGuid().ToString(); } m.reference = newRef; } foreach (PortalDefinition.Column c in column.Columns) { getNewRef(c); } }
HtmlTableRow genHeaderTable(PortalDefinition.Column column) // columns inside { // header row HtmlTableRow trHeader = new HtmlTableRow(); HtmlTableCell td = new HtmlTableCell(); td.Style["color"] = "white"; td.Style["background-color"] = "#303030"; if (column.Columns.Count > 1) { td.Attributes["colspan"] = column.Columns.Count.ToString(); } string html = "<div style=\"clear:both; margin:5px;\"><div style=\"float:left;\"><span>" + column.ColumnName + "</span></div>"; html += "<div style=\"float:right;\">"; if (column.EditableColumnWidth) { html += "<a class=\"arrow editablecolumnwidth_active\" href=\"#\" title=\"Bảng này cho phép sửa độ rộng cột, bấm vào để thay đổi\" onclick=\"tonggle_editablecolumnwidth(this); return false;\"></a>"; } else { html += "<a class=\"arrow editablecolumnwidth_inactive\" href=\"#\" title=\"Bảng này không cho phép sửa độ rộng cột, bấm vào để thay đổi\" onclick=\"tonggle_editablecolumnwidth(this); return false;\"></a>"; } html += "<a class=\"arrow addcolumn\" href=\"#\" title=\"Thêm cột vào trong bảng\" onclick=\"addColumn(this); return false;\"></a>"; html += "<a class=\"arrow edit\" href=\"#\" title=\"Sửa tên bảng\" onclick=\"editTableName(this); return false;\"></a>"; html += "<a class=\"arrow moveup\" href=\"#\" title=\"Chuyển bảng lên trên\" onclick=\"moveTableUp(this); return false;\"></a>"; html += "<a class=\"arrow movedown\" href=\"#\" title=\"Chuyển bảng xuống dưới\" onclick=\"moveTableDown(this); return false;\"></a>"; html += "<a class=\"arrow moveleft\" href=\"#\" title=\"Chuyển bảng sang trái\" onclick=\"moveTableLeft(this); return false;\"></a>"; html += "<a class=\"arrow moveright\" href=\"#\" title=\"Chuyển bảng sang phải\" onclick=\"moveTableRight(this); return false;\"></a>"; html += "<a class=\"arrow remove\" href=\"#\" title=\"Xóa bảng này\" onclick=\"removeTable(this); return false;\"></a>"; html += "</div></div><br style=\"clear:both;\" />"; td.InnerHtml = html; bindColumnProperties(td, column); trHeader.Controls.Add(td); trHeader.Attributes["class"] = "header"; return(trHeader); }
protected void OnAddColumn(object sender, CommandEventArgs e) { if (Parent is Tab) { PortalDefinition pd = PortalDefinition.Load(); PortalDefinition.Tab t = pd.GetTab(e.CommandArgument.ToString()); if (t != null) { PortalDefinition.Column _objNewColumn = PortalDefinition.Column.Create(t); t.Columns.Add(_objNewColumn); pd.Save(); if (AddColumn != null) { AddColumn(this, _objNewColumn); } } } else if (Parent is Template) { TemplateDefinition td = TemplateDefinition.Load(); TemplateDefinition.Template t = td.GetTemplate(e.CommandArgument.ToString()); if (t != null) { PortalDefinition.Column _objNewColumn = PortalDefinition.Column.Create(t); t.Columns.Add(_objNewColumn); td.Save(); if (AddColumn != null) { AddColumn(this, _objNewColumn); } } } }
void saveTable(ref PortalDefinition.Column column, XmlNode htmlTable, int level) { XmlNodeList xmlHeaderCells = htmlTable.SelectNodes("tbody/tr/td"); if (xmlHeaderCells.Count == 0) { xmlHeaderCells = htmlTable.SelectNodes("tbody/tr/td".ToUpper()); // fix ie: UPPERCASE all tag } XmlNode xmlHeaderCell = xmlHeaderCells[0]; column.ColumnLevel = level; string reference = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@ref")); if (!string.IsNullOrEmpty(reference)) { column.ColumnReference = reference; } column.ColumnName = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@name")); column.ColumnWidth = "100%"; column.EditableColumnWidth = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@editablecolumnwidth")).ToLower() == "true"; column.IsDragable = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@isdragable")).ToLower() == "true"; XmlNodeList htmlColumns = htmlTable.SelectNodes("tbody/tr[position()=2]/td"); if (htmlColumns.Count == 0) { htmlColumns = htmlTable.SelectNodes("TBODY/TR[position()=2]/TD"); // fix ie: UPPERCASE all tag } PortalDefinition.Column childColumn; foreach (XmlNode htmlColumn in htmlColumns) { childColumn = PortalDefinition.Column.Create(column); saveColumn(ref childColumn, htmlColumn, 0); column.Columns.Add(childColumn); } }
/// <summary> /// Thủ tục lưu các thông tin đã xác lập của 1 Cột /// </summary> /// <param name="sender"></param> /// <param name="args"></param> protected void OnSave(object sender, EventArgs args) { try { if (Page.IsValid) { // Save PortalDefinition.Column _objColumn = null; PortalDefinition pd = null; TemplateDefinition td = null; if (Parent is Tab) { // Lấy thông tin về cột cần sửa pd = PortalDefinition.Load(); _objColumn = pd.GetColumn(CurrentColumnReference); } else if (Parent is Template) { td = TemplateDefinition.Load(); _objColumn = td.GetColumn(CurrentColumnReference); } if (_objColumn != null) { // Cập nhật lại tên cột và độ rộng của cột _objColumn.ColumnName = txtTitle.Text; // Cập nhật màu nền của cột _objColumn.ColumnCustomStyle = txtCustomStyle.Text; // Cập nhật mức độ của cột _objColumn.ColumnLevel = Convert.ToInt32(drdColumnLevel.SelectedValue); //lay ve do rong cua cot string strColWidth = txtColWidth.Text; try { _objColumn.ColumnWidth = chkDefaultColumnWidth.Checked ? "" : strColWidth; } catch { // Nếu có lỗi, lấy độ rộng mặc định _objColumn.ColumnWidth = ""; } } if (Parent is Tab) { pd.Save(); } else if (Parent is Template) { td.Save(); } CurrentColumnReference = _objColumn.ColumnReference; if (Save != null) { Save(this, new EventArgs()); } } } catch (Exception e) { lbError.Text = e.Message; } }
internal void MoveColumnRight(string _strColumnReference) { // Nạp cấu trúc Portal TemplateDefinition _objPortal = TemplateDefinition.Load(); // Lấy thông tin về cột cần dịch chuyển PortalDefinition.Column _objSelectedColumn = _objPortal.GetColumn(_strColumnReference); // Nếu cột cần dịch chuyển không tồn tại thì kết thúc hàm if (_objSelectedColumn != null) { // Tìm kiếm danh sách cột trong đó có cột đang xét PortalDefinition.Column _objParentColumn = _objSelectedColumn.ColumnParent; ArrayList _arrColumnsList = null; // Nếu cột cha rỗng thì cột đang xét trực thuộc Tab if (_objParentColumn == null) { // Lấy thông tin Tab hiện thời TemplateDefinition.Template _objCurrentTemplate = _objPortal.GetTemplate(CurrentTemplateReference); if (_objCurrentTemplate != null) { // Lấy danh sách cột của Tab _arrColumnsList = _objCurrentTemplate.Columns; } } else { // Nếu cột đang xét là cột con của 1 cột khác, thì trả về danh sách các cột đồng cấp _arrColumnsList = _objParentColumn.Columns; } // Biến lưu vị trí của cột đã chọn trong danh sách int _intCurrentColumnIndex = 0; // Biến lưu trữ số cột đồng mức với cột đã chọn int _intSameLevelColumnsCount = 0; // Kiểm duyệt danh sách cột đồng cấp // Đếm cột có cùng Level for (int _intColumnCount = 0; _intColumnCount < _arrColumnsList.Count; _intColumnCount++) { PortalDefinition.Column _objColumn = _arrColumnsList[_intColumnCount] as PortalDefinition.Column; if (_objColumn.ColumnLevel == _objSelectedColumn.ColumnLevel) { if (_objColumn.ColumnReference == _objSelectedColumn.ColumnReference) { _intCurrentColumnIndex = _intSameLevelColumnsCount; } _intSameLevelColumnsCount++; } } // Duyệt danh sách các cột cùng cấp if (_arrColumnsList != null && _intSameLevelColumnsCount > 0) { // Để di chuyển sang phải --> không thể đang là vị trí cuối cùng if (_intCurrentColumnIndex >= (_intSameLevelColumnsCount - 1)) { return; } else { // Di chuyển cột đã chọn sang trái _arrColumnsList.RemoveAt(_intCurrentColumnIndex); _arrColumnsList.Insert(_intCurrentColumnIndex + 1, _objSelectedColumn); } } } // Lưu cấu trúc Portal _objPortal.Save(); // Nạp dữ liệu Template LoadData(CurrentTemplateReference); // Nạp dữ liệu cột if (CurrentColumnReference != "") { EditColumn(CurrentColumnReference); } }
protected void OnAddColumn(object sender, PortalDefinition.Column _objNewColumn) { EditColumn(_objNewColumn.ColumnReference); }
/// <summary> /// Thủ tục tạo và sắp xếp các cột của một Tab /// </summary> /// <param name="_objCurrentTab">Đối tượng chứa thông tin về Tab hiện thời</param> /// <param name="_arrColumns">Mảng chứa danh sách cột xuất phát</param> /// <param name="_htcContainer">Điều khiển sẽ chứa các cột trong danh sách cột xuất phát</param> private void RenderColumns(PortalDefinition.Tab _objCurrentTab, ArrayList _arrColumns, HtmlTableCell _htcContainer) { // Nếu không có cột nào trong danh sách xuất phát thì kết thúc thủ tục if (_arrColumns == null || _arrColumns.Count == 0) { return; } // Khai báo mảng chứa các điều khiển bảng dùng để chứa cột ArrayList _arrTableIndexes = new ArrayList(); // Duyệt danh sách các cột xuất phát for (int _intColumnCount = 0; _intColumnCount < _arrColumns.Count; _intColumnCount++) { // Lấy thông tin về cột đang xét PortalDefinition.Column _objColumn = _arrColumns[_intColumnCount] as PortalDefinition.Column; SortableHtmlTable _objTable = null; HtmlTableRow _objTableRow = null; HtmlTableRow _objTableHeaderRow = null; HtmlTableRow _objTableFooterRow; // Duyệt danh sách các bảng đã tạo // Các cột có cùng cấp độ sẽ nằm cùng một bảng foreach (SortableHtmlTable _tblContainer in _arrTableIndexes) { // Kiểm tra cấp độ của cột đang xét if (_tblContainer.Attributes["level"] == _objColumn.ColumnLevel.ToString()) { // Nếu bảng đang xét có cùng cấp độ với cột đang xét // thì lấy tham chiếu đến bảng và dòng đầu tiên của bảng _objTable = _tblContainer; _objTableHeaderRow = _tblContainer.Rows[0]; _objTableRow = _tblContainer.Rows[1]; break; } } // Nếu bảng chưa có tham chiếu (cấp độ hiện thời của cột là cấp độ mới (chưa được xét) if (_objTable == null) { // Khởi tạo bảng _objTable = new SortableHtmlTable(); _objTable.CellPadding = 0; _objTable.CellSpacing = 0; _objTable.Border = 0; // Lưu trữ cấp độ của bảng (chứa các cột có cùng cấp độ) _objTable.Attributes.Add("level", _objColumn.ColumnLevel.ToString()); // Tạo dòng chứa tiêu đề các cột _objTableHeaderRow = new HtmlTableRow(); _objTable.Rows.Add(_objTableHeaderRow); // Tạo dòng chứa các cột _objTableRow = new HtmlTableRow(); _objTable.Rows.Add(_objTableRow); _arrTableIndexes.Add(_objTable); } // Khởi tạo điều khiển đại diện cho 1 cột HtmlTableCell _objCellContainer = new HtmlTableCell(); _objCellContainer.VAlign = "top"; // _objCellContainer.Attributes.Add("id", "Cell" + _objColumn.ColumnReference.Replace('-', '_')); // _objCellContainer.Attributes.Add("class", IsAdmin ? "Portal_Column" : "Portal_NormalColumn"); if (_objColumn.ColumnCustomStyle != null && _objColumn.ColumnCustomStyle != "") { _objCellContainer.Attributes.Add("style", _objColumn.ColumnCustomStyle); } // Kiểm tra xem độ rộng cột có được thiết lập hay không if (_objColumn.ColumnWidth != "") { // Nếu được thiết lập thì xác định thông số width của cột _objCellContainer.Attributes.Add("width", _objColumn.ColumnWidth.ToString()); // Nếu thiết lập là 100%, có nghĩa là chỉ có 1 cột --> bảng chứa cột này cần được để lên 100% if (_objColumn.ColumnWidth == "100%") { _objTable.Attributes.Add("width", "100%"); } } // Thêm cột vừa tạo vào bảng _objTableRow.Cells.Add(_objCellContainer); // Sắp xếp các Module đã được thiết lập cho cột đang xét RenderModules(_objCellContainer, _objCurrentTab, _objColumn.ModuleList); // Thực hiện sinh mã cho các cột con RenderColumns(_objCurrentTab, _objColumn.Columns, _objCellContainer); } // Thêm danh sách bảng có được vào vùng chứa hiện thời if (_arrTableIndexes != null && _arrTableIndexes.Count > 0) { //try //{ // Sắp xếp lại các cột theo đúng thứ tự Level đã định _arrTableIndexes.Sort(); // Duyệt danh sách các bảng đã tạo ra foreach (HtmlTable _objIndexedTable in _arrTableIndexes) { // Tính lại độ rộng của các cột trong bảng ReCalculateCellsWidth(_objIndexedTable); // Kiểm tra cấp độ của bảng if (Convert.ToInt32(_objIndexedTable.Attributes["level"]) == -1) { // Nếu là cấp độ mặc định (-1) // tức là bảng nằm ở cuối danh sách các điều khiển của cột _htcContainer.Controls.Add(_objIndexedTable); } else { int _intColumnLevel = Convert.ToInt32(_objIndexedTable.Attributes["level"]); // Chèn khung hiển thị vào cột cha đang xét // Kiểm tra vị trí chèn có hợp lệ không (phải chèn vào trong danh sách, không được chèn ra ngoài) if (_htcContainer.Controls.Count > _intColumnLevel) { // Đặt khung vào vị trí đã định _htcContainer.Controls.AddAt(_intColumnLevel, _objIndexedTable); } else { // Nếu vị trí chèn nằm ngoài danh sách thì sử dụng lệnh thêm vào cuối danh sách thay vì chèn _htcContainer.Controls.Add(_objIndexedTable); } } } } }
/// <summary> /// Hàm trả về danh sách tất cả các cấp độ có thể của một cột con /// </summary> /// <param name="_objEditingColumn">Đối tượng chứa thông tin về cột con cần lấy danh sách cấp độ</param> /// <returns>Mảng chứa danh sách cấp độ có thể của cột con</returns> private ArrayList LoadAvaiableColumnLevels(PortalDefinition.Column _objEditingColumn) { if (_objEditingColumn == null) { return(null); } ArrayList _objPossibleLevels = new ArrayList(); // Lưu cấp độ mặc định là -1 (cấp độ thấp nhất) _objPossibleLevels.Add(-1); if (_objEditingColumn.ColumnParent == null) { // Nếu không có cột cha thì tính số lượng cấp độ có thể dựa vào số lượng cấp độ của các cột cha if (_objEditingColumn.TabRef != null || _objEditingColumn.TemplateRef != null) { int _intMaxLevel = -1; if (Parent is Tab) { foreach (PortalDefinition.Column _objParentColumn in _objEditingColumn.TabRef.Columns) { if (_objParentColumn != null && _objParentColumn.ColumnLevel > _intMaxLevel) { _intMaxLevel = _objParentColumn.ColumnLevel; } } } else if (Parent is Template) { foreach (PortalDefinition.Column _objParentColumn in _objEditingColumn.TemplateRef.Columns) { if (_objParentColumn != null && _objParentColumn.ColumnLevel > _intMaxLevel) { _intMaxLevel = _objParentColumn.ColumnLevel; } } } // Trả về danh sách cấp độ for (int _intLevelCount = 0; _intLevelCount <= _intMaxLevel + 1; _intLevelCount++) { _objPossibleLevels.Add(_intLevelCount); } } return(_objPossibleLevels); } else { // Nếu có Module trong cột cha thì lấy danh sách cấp độ theo số lượng Module trong cột cha if (_objEditingColumn.ColumnParent.ModuleList != null && _objEditingColumn.ColumnParent.ModuleList.Count > 0) { // Duyệt danh sách Module trong cột cha for (int _intModuleCount = 0; _intModuleCount < _objEditingColumn.ColumnParent.ModuleList.Count; _intModuleCount++) { _objPossibleLevels.Add(_intModuleCount); } // Kiểm tra xem có cột con nào nữa hay không, nếu có cột con thì phải thêm vào số lượng mức của các cột con // Duyệt danh sách cột trong cột cha để lấy ra cấp độ lớn nhất int _intMaxLevel = -1; foreach (PortalDefinition.Column _objCurrentColumn in _objEditingColumn.ColumnParent.Columns) { if (_objCurrentColumn != null && _objCurrentColumn.ColumnLevel > _intMaxLevel) { _intMaxLevel = _objCurrentColumn.ColumnLevel; _objPossibleLevels.Add(_objPossibleLevels.Count - 1); } } return(_objPossibleLevels); } else { // Cột cha không có Module nào // Lấy danh sách cấp độ dựa theo số lượng cấp độ của Module // Duyệt danh sách cột trong cột cha để lấy ra cấp độ lớn nhất int _intMaxLevel = -1; foreach (PortalDefinition.Column _objCurrentColumn in _objEditingColumn.ColumnParent.Columns) { if (_objCurrentColumn != null && _objCurrentColumn.ColumnLevel > _intMaxLevel) { _intMaxLevel = _objCurrentColumn.ColumnLevel; } } // Trả về danh sách cấp độ for (int _intLevelCount = 0; _intLevelCount <= _intMaxLevel + 1; _intLevelCount++) { _objPossibleLevels.Add(_intLevelCount); } return(_objPossibleLevels); } } }
private TableCell AnalyseColumn(PortalDefinition.Column column) { if (column.Columns.Count == 0) { TableCell cellColumn; if (column.ModuleList.Count >= 1) { string strModuleTitle_0 = ""; for (int i = 0; i < column.ModuleList.Count; i++) { PortalDefinition.Module tempModule_0 = (PortalDefinition.Module)column.ModuleList[i]; if (i == 0) { strModuleTitle_0 += tempModule_0.title; } else { strModuleTitle_0 += " <br> " + tempModule_0.title; } } cellColumn = CreateTableCell(strModuleTitle_0, "child-cell", column.ColumnCustomStyle, column.ColumnWidth); } else { cellColumn = CreateTableCell("cột mới chưa có module", "child-cell", column.ColumnCustomStyle, column.ColumnWidth); } return(cellColumn); } // if this column has more one children else { TableCell cellColumn; cellColumn = CreateTableCell("", "", column.ColumnCustomStyle, column.ColumnWidth); //Moi dong cua mot level tuong ung voi mot bang duoc chua trong mot cell Table childrenTable = new Table(); childrenTable.Width = cellColumn.Width; cellColumn.Controls.Add(childrenTable); int _iMaxColumnLevel = column.GetMaxLevelOfChildrenColumns(); int _iMinColumnLevel = column.GetMinLevelOfChildrenColumns(); for (int currentColumnLevel_1 = _iMinColumnLevel; currentColumnLevel_1 <= _iMaxColumnLevel; currentColumnLevel_1++) { //Get all column have same level ArrayList _arrayListColumns = column.GetArrayChildrenColumnWithLevel(currentColumnLevel_1); TableRow childrenRow = new TableRow(); childrenRow.Width = childrenTable.Width; childrenTable.Rows.Add(childrenRow); TableCell cellChildrenColumn = CreateTableCell("", "", "", ""); cellChildrenColumn.Width = childrenRow.Width; childrenRow.Cells.Add(cellChildrenColumn); Table grandChildrenTable = new Table(); grandChildrenTable.Width = cellChildrenColumn.Width; cellChildrenColumn.Controls.Add(grandChildrenTable); TableRow grandChildrenRow = new TableRow(); grandChildrenRow.Width = grandChildrenTable.Width; grandChildrenTable.Rows.Add(grandChildrenRow); foreach (PortalDefinition.Column childrenColumn in _arrayListColumns) { TableCell cellGradnChildrenColumn = AnalyseColumn(childrenColumn); if (_arrayListColumns.Count == 1) { cellGradnChildrenColumn.Width = grandChildrenRow.Width; } grandChildrenRow.Cells.Add(cellGradnChildrenColumn); } } //if this colum has more one module if (column.ModuleList.Count >= 1) { TableRow childrenRow = new TableRow(); childrenRow.Width = childrenTable.Width; childrenTable.Rows.Add(childrenRow); string strModuleTitle_0 = ""; for (int i = 0; i < column.ModuleList.Count; i++) { PortalDefinition.Module tempModule_0 = (PortalDefinition.Module)column.ModuleList[i]; if (i == 0) { strModuleTitle_0 += tempModule_0.title; } else { strModuleTitle_0 += " <br> " + tempModule_0.title; } } TableCell cellChildrenColumn = CreateTableCell(strModuleTitle_0, "child-cell", column.ColumnCustomStyle, column.ColumnWidth); cellChildrenColumn.Width = childrenRow.Width; childrenRow.Cells.Add(cellChildrenColumn); } return(cellColumn); } }