/// <summary> /// 根据从表数据创建控件,设置样式,并添加至table /// </summary> /// <param name="objSubList"></param> public void CreateSubList(ObjSubList[] objSubList, ObjBill bill) { if (null != objSubList && objSubList.Length > 0) { int dgID = 1; foreach (ObjSubList subList in objSubList) { //如果是空行则退出 if (subList.RowList.Length == 0) { continue; } //DataTable dt = subList.GetDataTable(); #region Verticle if (subList.Align == "verticle") { if (null != subList.ColumnList && subList.ColumnList.Length > 0) { { HtmlTableRow tr = new HtmlTableRow(); HtmlTableCell td = CreateTD(1, null, null, "billTopTd"); Label label = new Label(); label.Text = subList.Text; td.Controls.Add(label); tr.Controls.Add(td); TableCtrl.Controls.Add(tr); } HtmlTable tbSubList = new HtmlTable(); tbSubList.Width = "100%"; tbSubList.BgColor = "#999999"; tbSubList.Border = 0; tbSubList.CellSpacing = 1; tbSubList.CellPadding = 3; foreach (ObjRow row in subList.RowList) { int n = 0; HtmlTableRow tr = null; int columncount = 0; foreach (ObjColumn column in subList.ColumnList[0].ColumnList) { if (column.IsVisible) { columncount++; } } string name = ""; foreach (ObjColumn column in subList.ColumnList[0].ColumnList) { if (column.IsVisible) { if (n == 0) { tr = new HtmlTableRow(); HtmlTableCell td = new HtmlTableCell(); td.InnerText = row.GetObjFieldValue(column.Name); name = td.InnerText; td.BgColor = "white"; td.Width = "25%"; td.RowSpan = columncount - 1; td.Align = "center"; td.Style.Add("font-size", "14px"); td.Style.Add("font-weight", "bold"); tr.Cells.Add(td); } else { if (n > 1) { tr = new HtmlTableRow(); } HtmlTableCell td = new HtmlTableCell(); td.InnerText = column.Text; td.BgColor = "#f1f1f1"; td.Width = "25%"; tr.Cells.Add(td); HtmlTableCell tdcontent = new HtmlTableCell(); tdcontent.InnerText = row.GetObjFieldValue(column.Name); tdcontent.BgColor = "white"; tdcontent.Width = "25%"; tr.Cells.Add(tdcontent); if (n == 1) { HtmlTableCell tdview = new HtmlTableCell(); HtmlTable tbDetail = new HtmlTable(); tbDetail.Width = "100%"; tbDetail.BgColor = "#999999"; tbDetail.Border = 0; tbDetail.CellSpacing = 1; tbDetail.CellPadding = 3; HtmlTableRow trDetail1 = new HtmlTableRow(); HtmlTableCell tdDetail1 = new HtmlTableCell(); tdDetail1.Align = "left"; tdDetail1.BgColor = "#e1e1e1"; tdDetail1.Style.Add("font-weight", "bold"); tdDetail1.InnerHtml = name + "薪资详情"; tdDetail1.Height = "35"; trDetail1.Cells.Add(tdDetail1); HtmlTableCell tdDetail4 = new HtmlTableCell(); tdDetail4.Align = "right"; tdDetail4.BgColor = "#e1e1e1"; tdDetail4.Style.Add("font-weight", "bold"); tdDetail4.InnerHtml = @"<input type=""button"" value=""关闭"" onclick=""javascript:closeDetail();"" onmousemove=""javascript:MousemoveAudit(this.id);"" onmouseout=""javascript:MouseoutAudit(this.id);"" id=""btn_close"" name=""btn_close"" class=""billAuditYes"" />"; tdDetail4.Height = "35"; trDetail1.Cells.Add(tdDetail4); tbDetail.Rows.Add(trDetail1); foreach (ObjColumn detailcolumn in subList.ColumnList[0].ColumnList) { HtmlTableRow trDetail2 = new HtmlTableRow(); HtmlTableCell tdDetail2 = new HtmlTableCell(); tdDetail2.Align = "left"; tdDetail2.Width = "50%"; tdDetail2.BgColor = "#f1f1f1"; tdDetail2.InnerHtml = detailcolumn.Text; trDetail2.Cells.Add(tdDetail2); HtmlTableCell tdDetail3 = new HtmlTableCell(); tdDetail3.Align = "left"; tdDetail2.Width = "50%"; tdDetail3.BgColor = "#ffffff"; tdDetail3.InnerHtml = row.GetObjFieldValue(detailcolumn.Name); trDetail2.Cells.Add(tdDetail3); tbDetail.Rows.Add(trDetail2); } tdview.RowSpan = columncount - 1; tdview.InnerHtml = "<a href=\"javascript:showDetail('virdetail" + row.Id + "')\">详请</a>"; HtmlGenericControl div = new HtmlGenericControl(); div.TagName = "div"; div.Style.Add("display", "none"); div.ID = "virdetail" + row.Id; div.Controls.Add(tbDetail); tdview.Controls.Add(div); tdview.BgColor = "white"; tdview.Width = "25%"; tdview.Align = "center"; tr.Cells.Add(tdview); } } if (n > 0) { tbSubList.Rows.Add(tr); } n++; } } } { int n = 0; HtmlTableRow tr = null; int columncount = 0; foreach (Field field in bill.DetailLists[0].GetFieldDict()) { if (!String.IsNullOrEmpty(field.ColumnOrder) && Convert.ToInt32(field.ColumnOrder) > 0) { columncount++; } } foreach (Field field in bill.DetailLists[0].GetFieldDict()) { if (!String.IsNullOrEmpty(field.ColumnOrder) && Convert.ToInt32(field.ColumnOrder) > 0) { if (n == 0) { tr = new HtmlTableRow(); HtmlTableCell td = new HtmlTableCell(); td.InnerText = "总计"; td.BgColor = "white"; td.Width = "25%"; td.RowSpan = columncount; td.Align = "center"; td.Style.Add("font-size", "14px"); td.Style.Add("font-weight", "bold"); td.Style.Add("border-top", "1px black solid"); tr.Cells.Add(td); } { if (n > 0) { tr = new HtmlTableRow(); } HtmlTableCell td = new HtmlTableCell(); td.InnerText = field.CaptionName.TrimEnd(':'); td.BgColor = "#f1f1f1"; td.Width = "25%"; if (n == 0) { td.Style.Add("border-top", "1px black solid"); } tr.Cells.Add(td); HtmlTableCell tdcontent = new HtmlTableCell(); tdcontent.Controls.Add((Control)field.MainControl[0]); tdcontent.BgColor = "white"; tdcontent.Width = "25%"; if (n == 0) { tdcontent.Style.Add("border-top", "1px black solid"); } tr.Cells.Add(tdcontent); if (n == 0) { HtmlTableCell tdview = new HtmlTableCell(); tdview.InnerHtml = " "; tdview.BgColor = "white"; tdview.Width = "25%"; tdview.Align = "center"; tdview.RowSpan = columncount; if (n == 0) { tdview.Style.Add("border-top", "1px black solid"); } tr.Cells.Add(tdview); } } //if (n > 0) { tbSubList.Rows.Add(tr); } n++; } } } HtmlTableRow tra = new HtmlTableRow(); HtmlTableCell tda = CreateTD(1, "100%", null, null); tda.Controls.Add(tbSubList); tra.Cells.Add(tda); TableCtrl.Rows.Add(tra); } } #endregion else { if (null != subList.ColumnList && subList.ColumnList.Length > 0) { if (subList.RowList.Length == 0) { continue; } if (subList.RowList[0] == null) { continue; } if (subList.HideWhenEmpty == "1" && subList.CheckEmpty()) { continue; } { //HtmlTableRow tr = new HtmlTableRow(); //HtmlTableCell td = CreateTD(1, null, null, "billTopTd"); //Label label = new Label(); //label.Text = subList.Text; //td.Controls.Add(label); //tr.Controls.Add(td); //TableCtrl.Controls.Add(tr); //从表头 HtmlGenericControl DivTop = new HtmlGenericControl("div"); DivTop.Attributes.Add("class", "tabpanelheaddiv"); HtmlGenericControl span = new HtmlGenericControl("span"); span.Attributes.Add("style", "height:30px;line-height:30px;"); span.InnerText = subList.Text; DivTop.Controls.Add(span); HtmlTableRow tr = new HtmlTableRow(); HtmlTableCell td = CreateTD(1, null, null, ""); td.Attributes.Add("style", "padding:3px 0px 0px 0px;margin:0px;"); td.Controls.Add(DivTop); tr.Controls.Add(td); TableCtrl.Controls.Add(tr); } { HtmlTable tbSubList = new HtmlTable(); tbSubList.Width = "100%"; tbSubList.BgColor = "#999999"; tbSubList.Border = 0; tbSubList.CellSpacing = 1; tbSubList.CellPadding = 3; tbSubList.Attributes.Add("class", "audit ClassTableNew MobileTabGrid"); //tbSubList.Attributes.Add("style", "border: 1px solid #5F5F5F;"); HtmlTableRow tr = new HtmlTableRow(); tr.Attributes.Add("class", "auditHeader"); { HtmlTableCell td = new HtmlTableCell("th"); td.Attributes.Add("style", "padding:3px 0px 0px 0px;margin:0px;"); td.InnerHtml = "<div></div>"; //td.BgColor = "#E1EFF7"; td.Width = "3%"; tr.Cells.Add(td); } double sum = 0; bool isSum = false; string sumName = string.Empty; List<string> sumList = new List<string>(); HtmlTableRow sumRow = new HtmlTableRow(); var sumTD = new HtmlTableCell() { InnerText = "" }; sumTD.Attributes.Add("class", "Align_Right"); sumRow.Cells.Add(sumTD); sumRow.Attributes.Add("class", "ClassTableNewSum"); int cellIndex = 1; int cellCols = 0; int cellColsOut = 0; foreach (ObjColumn column in subList.ColumnList[0].ColumnList) { if (column.IsVisible) { HtmlTableCell td = new HtmlTableCell("th"); td.Attributes.Add("Title",column.ToolTip); td.InnerHtml = "<div>" + column.Text + "</div>"; // td.Attributes.Add("class", "ui-state-default ui-th-column ui-th-ltr"); // td.BgColor = "#E1EFF7"; td.Width = column.Width; tr.Cells.Add(td); if (column.ColumnSum != null) { if (column.ColumnSum.ToLower() == "true") { sumName = column.Name; isSum = true; cellCols++; cellColsOut = 1; sumList.Add(column.Name); } else { cellCols = 0; } } else { cellCols = 0; } cellIndex++; if (cellCols > 1) { sumRow.Cells[sumRow.Cells.Count - 1].ColSpan = (cellIndex - sumRow.Cells.Count) + 1; } else { sumRow.Cells.Add(new HtmlTableCell() { InnerText = "" }); } } } tbSubList.Rows.Add(tr); int i = 0; bool hassub = false; foreach (ObjRow row in subList.RowList) { //忽略空行 if (row == null) { continue; } HtmlTableRow trcontent = new HtmlTableRow(); trcontent.Attributes.Add("class", "auditRow"); { HtmlTableCell td = new HtmlTableCell(); if (row.SubSubList != null && row.SubSubList.Length > 0) { td.InnerHtml = "<img src='" + this.Template.ImageUrl + "plus.gif' id='subimg" + i + "'>"; td.RowSpan = 1; td.ID = "tdsub" + i; } else { td.InnerHtml = " "; td.RowSpan = 1; td.ID = "tbsub" + i; } td.Align = "center"; td.VAlign = "top"; td.BgColor = "white"; td.Width = "3%"; trcontent.Cells.Add(td); } if (row.SubSubList != null && row.SubSubList.Length > 0) { trcontent.Attributes.Add("onclick", @"showsub(""tr" + i + @""",""subimg" + i + @""",""tdsub" + i + @""")"); } int rowIndex = 1; cellIndex = 1; foreach (ObjColumn column in subList.ColumnList[0].ColumnList) { if (column.IsVisible) { HtmlTableCell tdcontent = new HtmlTableCell(); ObjField field = row.GetObjFieldDict()[column.Name]; if ( field != null) { string rowValue = field.DataValue; var tempValue = rowValue; if (!string.IsNullOrEmpty(column.Format)) { tempValue = field.GetFormatValue(column.Format); } tdcontent.InnerText = tempValue; if (!string.IsNullOrEmpty(field.Color)) { tdcontent.Style.Add("color", field.Color); } if (!string.IsNullOrEmpty(field.Tooltip)) { tdcontent.Attributes.Add("title", field.Tooltip); } var align = "Left"; if (!string.IsNullOrEmpty(column.Align)) { align = column.Align; } tdcontent.Attributes.Add("class", "Align_" + align); if (isSum) { if (sumList.Contains(column.Name)) { double tryValue = 0; if (double.TryParse(rowValue, out tryValue)) { sum += tryValue; } sumRow.Cells[cellIndex].InnerText = string.Format("合计:{0}", sum); } else { cellIndex++; } } } tdcontent.BgColor = "white"; trcontent.Cells.Add(tdcontent); rowIndex++; } } tbSubList.Rows.Add(trcontent); #region 如果有嵌套的明细数据 //如果有嵌套的明细数据 if (row.SubSubList != null && row.SubSubList.Length > 0) { hassub = true; foreach (ObjSubList subsubList in row.SubSubList) { HtmlTable tbSubSubList = new HtmlTable(); tbSubSubList.Width = "100%"; tbSubSubList.BgColor = "#999999"; tbSubSubList.Border = 0; tbSubSubList.CellSpacing = 1; tbSubSubList.CellPadding = 3; tbSubSubList.Attributes.Add("style", "margin: 5px 2%;width: 96%;"); HtmlTableRow trSub = new HtmlTableRow(); //设置DataGrid控件的列 foreach (ObjColumn column in subsubList.ColumnList[0].ColumnList) { if (column.IsVisible) { HtmlTableCell tdsub = new HtmlTableCell("th"); tdsub.Attributes.Add("Title", column.ToolTip); tdsub.InnerText = column.Text; tdsub.BgColor = "#E1EFF7"; tdsub.Width = column.Width; trSub.Cells.Add(tdsub); } } tbSubSubList.Rows.Add(trSub); foreach (ObjRow rowsub in subsubList.RowList) { HtmlTableRow trcontentsub = new HtmlTableRow(); foreach (ObjColumn column in subsubList.ColumnList[0].ColumnList) { if (column.IsVisible) { HtmlTableCell tdcontent = new HtmlTableCell(); tdcontent.InnerText = rowsub.GetObjFieldValue(column.Name); tdcontent.BgColor = "white"; trcontentsub.Cells.Add(tdcontent); } } tbSubSubList.Rows.Add(trcontentsub); } HtmlTableRow trsubsub = new HtmlTableRow(); trsubsub.ID = "tr" + i; trsubsub.Style.Add("display", "none"); HtmlTableCell tdsubsub = CreateTD(1, "100%", null, null); tdsubsub.BgColor = "#dddddd"; tdsubsub.ColSpan = subList.ColumnList[0].ColumnList.Count(item => item.IsVisible); tdsubsub.Controls.Add(tbSubSubList); trsubsub.Cells.Add(tdsubsub); tbSubList.Rows.Add(trsubsub); } } #endregion if (hassub == false) { //tbSubList.Rows[0].Cells[0].Visible = false; //trcontent.Cells[0].Visible = false; } i++; } HtmlTableRow tra = new HtmlTableRow(); HtmlTableCell tda = CreateTD(1, "100%", null, null); tda.Attributes.Add("style", "margin:0px;padding:3px 0px 1px 0px;"); //添加合计 if (isSum) { tbSubList.Rows.Add(sumRow); } tda.Controls.Add(tbSubList); tra.Cells.Add(tda); TableCtrl.Rows.Add(tra); } } } dgID++; } } }
public static ObjSubList[] CreateSubList(XmlNode nodeObject, string listName, ObjBill schemaBill, bool isSub) { //选取ObjectList节点 XmlNodeList listList = nodeObject.SelectNodes("ObjectList"); //根据节点数建立实体集 ObjSubList[] sublists = new ObjSubList[listList.Count]; //遍历结点 for (int j = 0; j < listList.Count; j++) { //从该结点获取一个ObjectList的Name string subListName = ((XmlElement)listList[j]).GetAttribute("Name"); string subListText = ((XmlElement)listList[j]).GetAttribute("Text"); //建立Sublist对象 ObjSubList objSubList = new ObjSubList(); objSubList.Name = subListName; objSubList.Text = subListText; var temp = schemaBill.GetSubListsDict()[subListName]; if (temp != null) { objSubList.Align = temp.Align; objSubList.HideWhenEmpty = temp.HideWhenEmpty; } //把billschema的columnList的信息赋给bill //从该结点中获取Object节点集,对应Sublist的行数据 XmlNodeList objlist = listList[j].SelectNodes("Object"); //根据xml数据中的object节点数建立sublist对象的rowlist数组 objSubList.RowList = new ObjRow[objlist.Count]; //遍历 object节点集,以构建数据 for (int i = 0; i < objlist.Count; i++) { //得到object的name string rowName = ((XmlElement)objlist[i]).GetAttribute("Name"); string rowID = ((XmlElement)objlist[i]).GetAttribute("id"); if (string.IsNullOrEmpty(rowID)) { // continue; } //从object结点中得到所有的attribute,即该行的所有字段 XmlNodeList list = objlist[i].SelectNodes("Attribute"); //建立对应的objrow对象以容纳字段数据 ObjRow row = new ObjRow(); row.Name = rowName; row.Id = rowID; //根据attribut的数量建立fieldlist数组 row.ObjFieldList = new ObjField[list.Count]; //遍历attribute结点 for (int m = 0; m < list.Count; m++) { //从attribute节点中得到数据信息 XmlElement node = list[m] as XmlElement; string Name = ((XmlElement)node).GetAttribute("Name"); string Text = ((XmlElement)node).GetAttribute("Text"); string DataType = ((XmlElement)node).GetAttribute("DataType"); string DataValue = ((XmlElement)node).GetAttribute("DataValue"); //建立对应的objfield对象 ObjField dataField = new ObjField(); dataField.Name = Name; //dataField.Text = Text; dataField.DataType = DataType; dataField.DataValue = DataValue; string fgColor = string.Empty; string Tooltip = string.Empty; if (node.HasAttribute("Color")) { fgColor = node.GetAttribute("Color"); } if (node.HasAttribute("Tooltip")) { Tooltip = node.GetAttribute("Tooltip"); } dataField.Color = fgColor; dataField.Tooltip = Tooltip; //如果能够在配置文件中找到对应的定义项,则把该定义项的相关信息赋值到该对象。 //通过Name作为key进行过索引 if (schemaBill.GetSubListsDict()[subListName] != null && schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID] != null && schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID].GetObjFieldDict()[Name] != null) { ObjField schemaField = schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID].GetObjFieldDict()[Name]; dataField.Colspan = schemaField.Colspan; dataField.IsVisible = schemaField.IsVisible; dataField.CssName = schemaField.CssName; dataField.ColumnOrder = schemaField.ColumnOrder; } //把建立的field对象赋给对应索引的fieldlist数组。 row.ObjFieldList[m] = dataField; } //把建立的row对象赋给对应索引的 rowlist数组 objSubList.RowList[i] = row; row.SubSubList = CreateSubList(objlist[i], objSubList.Name, schemaBill, true); } //把建立的sublist对象赋给对应索引的sublist数组 if (schemaBill.GetSubListsDict()[objSubList.Name] != null && isSub == false) { objSubList.ColumnList = schemaBill.GetSubListsDict()[objSubList.Name].ColumnList; } //把建立的sublist对象赋给对应索引的sublist数组 if (schemaBill.GetSubListsDict()[listName] != null && isSub == true) { objSubList.ColumnList = schemaBill.GetSubListsDict()[listName].SubColumnList; } sublists[j] = objSubList; } return(sublists); }
public static ObjSubList[] CreateSubList(XmlNode nodeObject, string listName, ObjBill schemaBill, bool isSub) { //选取ObjectList节点 XmlNodeList listList = nodeObject.SelectNodes("ObjectList"); //根据节点数建立实体集 ObjSubList[] sublists = new ObjSubList[listList.Count]; //遍历结点 for (int j = 0; j < listList.Count; j++) { //从该结点获取一个ObjectList的Name string subListName = ((XmlElement)listList[j]).GetAttribute("Name"); string subListText = ((XmlElement)listList[j]).GetAttribute("Text"); //建立Sublist对象 ObjSubList objSubList = new ObjSubList(); objSubList.Name = subListName; objSubList.Text = subListText; var temp =schemaBill.GetSubListsDict()[subListName]; if (temp != null) { objSubList.Align = temp.Align; objSubList.HideWhenEmpty = temp.HideWhenEmpty; } //把billschema的columnList的信息赋给bill //从该结点中获取Object节点集,对应Sublist的行数据 XmlNodeList objlist = listList[j].SelectNodes("Object"); //根据xml数据中的object节点数建立sublist对象的rowlist数组 objSubList.RowList = new ObjRow[objlist.Count]; //遍历 object节点集,以构建数据 for (int i = 0; i < objlist.Count; i++) { //得到object的name string rowName = ((XmlElement)objlist[i]).GetAttribute("Name"); string rowID = ((XmlElement)objlist[i]).GetAttribute("id"); if (string.IsNullOrEmpty(rowID)) { // continue; } //从object结点中得到所有的attribute,即该行的所有字段 XmlNodeList list = objlist[i].SelectNodes("Attribute"); //建立对应的objrow对象以容纳字段数据 ObjRow row = new ObjRow(); row.Name = rowName; row.Id = rowID; //根据attribut的数量建立fieldlist数组 row.ObjFieldList = new ObjField[list.Count]; //遍历attribute结点 for (int m = 0; m < list.Count; m++) { //从attribute节点中得到数据信息 XmlElement node = list[m] as XmlElement; string Name = ((XmlElement)node).GetAttribute("Name"); string Text = ((XmlElement)node).GetAttribute("Text"); string DataType = ((XmlElement)node).GetAttribute("DataType"); string DataValue = ((XmlElement)node).GetAttribute("DataValue"); //建立对应的objfield对象 ObjField dataField = new ObjField(); dataField.Name = Name; //dataField.Text = Text; dataField.DataType = DataType; dataField.DataValue = DataValue; string fgColor = string.Empty; string Tooltip = string.Empty; if (node.HasAttribute("Color")) { fgColor = node.GetAttribute("Color"); } if (node.HasAttribute("Tooltip")) { Tooltip = node.GetAttribute("Tooltip"); } dataField.Color = fgColor; dataField.Tooltip = Tooltip; //如果能够在配置文件中找到对应的定义项,则把该定义项的相关信息赋值到该对象。 //通过Name作为key进行过索引 if (schemaBill.GetSubListsDict()[subListName] != null && schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID] != null && schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID].GetObjFieldDict()[Name] != null) { ObjField schemaField = schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID].GetObjFieldDict()[Name]; dataField.Colspan = schemaField.Colspan; dataField.IsVisible = schemaField.IsVisible; dataField.CssName = schemaField.CssName; dataField.ColumnOrder = schemaField.ColumnOrder; } //把建立的field对象赋给对应索引的fieldlist数组。 row.ObjFieldList[m] = dataField; } //把建立的row对象赋给对应索引的 rowlist数组 objSubList.RowList[i] = row; row.SubSubList = CreateSubList(objlist[i], objSubList.Name, schemaBill, true); } //把建立的sublist对象赋给对应索引的sublist数组 if (schemaBill.GetSubListsDict()[objSubList.Name] != null && isSub == false) { objSubList.ColumnList = schemaBill.GetSubListsDict()[objSubList.Name].ColumnList; } //把建立的sublist对象赋给对应索引的sublist数组 if (schemaBill.GetSubListsDict()[listName] != null && isSub == true) { objSubList.ColumnList = schemaBill.GetSubListsDict()[listName].SubColumnList; } sublists[j] = objSubList; } return sublists; }