将数据行转列分组显示
来源:互联网 发布:sql select返回值类型 编辑:程序博客网 时间:2024/05/15 11:21
效果图:
需打印界面:
打印出效果:
前台:
<head runat="server">
<title></title>
<style type="text/css">
table{
border:0px solid ; border-collapse: collapse; cellspacing:0px ; cellpadding:0px;
}
.td2{border:0px}
td{
border:1px solid; cellspacing:0px ; cellpadding:0px;height:20px;
}
th{
border:1px solid; cellspacing:0px ; cellpadding:0px;height:20px;
}
th,td{
word-wrap:break-word;
word-break:break-all;
}
.tdStyle{
font-size:10px;
font-weight:bold;
}
</style>
<script language="javascript" type="text/javascript">
function doPrint() {
document.getElementById("btnPrint").style.display="none";
window.print();
}
window.onblur=function(){
document.getElementById("btnPrint").style.display="block";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div style="margin-top: 0px">
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
<input type="button" title="打印页面" onclick="doPrint();" style="margin-left: 0px; margin-top: 0px; margin-left:670px;" value="打 印" id="btnPrint" />
</form>
</body>
后台:
XMLHelper xmlHelper = new XMLHelper();
string procInstID = string.Empty;
if (Request.QueryString["procinstid"] != null)
{
procInstID = Request.QueryString["procinstid"].ToString();
}
else
{
return;
}
string xmlString = bisDataCmp.GetGlobalXmlData(Convert.ToInt32(procInstID));
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
DataTable dt = this.RowChangeColumn(doc);
this.ShowDataTableRecords(dt);
/// <summary>
/// 行转列:
/// </summary>
/// <param name="doc"></param>
/// <returns></returns>
如图:
private DataTable RowChangeColumn(XmlDocument doc)
{
DataTable dt = this.CreateDataTableRecords(doc, "root/gridSupplier/row");
DataTable newTable=CreateDataTableColumn(2);
List<string> list = new List<string>();
int newGroup = dt.Rows.Count / 4;
if (dt.Rows.Count % 4 != 0)
{
for (int index1 = 0; index1 < newGroup+1;index1++) //被4整除有余数;
{
for (int index3 = 0; index3 < this.GetFieldKeys().Length; index3++)
{
DataRow drData = newTable.NewRow();
for (int index2 = index1 * 4; index2 < index1 * 4 + 4; index2++)
{
if (index2>dt.Rows.Count-1)
{
list.Add("");
}
else
{
list.Add(dt.Rows[index2][index3].ToString());
}
}
for (int index4 = 0; index4 < 4; index4++)
{
drData[index4] = list[index4];
}
newTable.Rows.Add(drData);
list.Clear();
}
}
}
else //刚好被4整除;
{
for (int index1 = 0; index1 < newGroup; index1++) //被4整除有余数;
{
for (int index3 = 0; index3 < this.GetFieldKeys().Length; index3++)
{
DataRow drData = newTable.NewRow();
for (int index2 = index1 * 4; index2 < index1 * 4 + 4; index2++)
{
list.Add(dt.Rows[index2][index3].ToString());
}
for (int index4 = 0; index4 < 4; index4++)
{
drData[index4] = list[index4];
}
newTable.Rows.Add(drData);
list.Clear();
}
}
}
return newTable;
}
/// <summary>
/// grid表中数据行转列显示:this.Literal1.Text
/// </summary>
如图:this.Literal1.Text 调试时候以html方式预览:
private void ShowDataTableRecords(DataTable dt)
{
if (dt.Rows.Count > 0) //表示有数据的情况下;
{
StringBuilder sb = new StringBuilder();
sb.Append("<table id='table3' style='width: 100%; font-size: 10px; border: solid 0px; margin: 0px #F2F2F2'><tr><td class='td2'><table style='width:100%; font-size:10px; border:solid 0px;margin:0px #F2F2F2'><tr><td colspan='4' style='font-weight: bold;font-size:11px;border-bottom: 0' align='left'>供应商信息</td></tr>");
int group = dt.Rows.Count / 14;
for(int i=0;i<group;i++)
{
for(int j=i*14;j<i*14+14;j++)
{
if(j%14==0)
{
List<string> list = new List<string>();
for(int k=1;k<4;k++)
{
list.Add(this.GetChkStatus(dt.Rows[j][k].ToString()));;
}
sb.Append("<tr><td style='width:15%;font-weight: bold;word-break:keep-all'>" + dt.Rows[j][0].ToString() + "</td><td style='width:28.3%'>" + list[0] + "</td><td style='width:28.3%'>" + list[1] + "</td><td style='28.4%'>" + list[2] + "</td></tr>");
}
else
{
sb.Append("<tr><td style='width:15%;font-weight: bold;word-break:keep-all'>" + dt.Rows[j][0].ToString() + "</td><td style='width:28.3%'>" + dt.Rows[j][1].ToString() + "</td><td style='width:28.3%'>" + dt.Rows[j][2].ToString() + "</td><td style='28.4%'>" + dt.Rows[j][3].ToString() + "</td></tr>");
}
}
if(i!=group-1)
{
sb.Append("<tr><td colspan='4' style='font-weight: bold; border-bottom: 0; height: 20px;'></td></tr>");
}
else
{
sb.Append("</table></td></tr></table>");
}
}
this.Literal1.Text = sb.ToString();
}
}
/// <summary>
/// 将数字转化成相应checkbox:1表示选中,0表示未选中,""表示没有这个数据;
/// </summary>
/// <param name="type">类型</param>
/// <returns></returns>
private string GetChkStatus(string type)
{
string chk="";
switch(type)
{
case"0":
chk = "<input id='Checkbox1' type='checkbox' disabled='disabled'/>";
break;
case "1":
chk="<input id='Checkbox1' type='checkbox' disabled='disabled' checked='checked'/>";
break;
}
return chk;
}
/// <summary>
/// 将xml中每3条记录添加1条属性列记录,形成新的表:
/// </summary>
/// <param name="doc"></param>
/// <param name="path"></param>
/// <returns></returns>
如图:
private DataTable CreateDataTableRecords(XmlDocument doc, string path)
{
XmlNodeList gridSupplier = doc.SelectNodes(path);
DataTable dt = this.CreateDataTableColumn(1);
if (gridSupplier != null)
{
int group = gridSupplier.Count / 3;
if(gridSupplier.Count %3!=0)
{
if (group == 0)
{
AddTitleRow(dt);
foreach (XmlNode node in gridSupplier)
{
DataRow drData = dt.NewRow();
drData["orgCheckBox"] = xmlHelper.GetSingleNodeValue(node, "orgCheckBox", "");
drData["CompanyName"] = xmlHelper.GetSingleNodeValue(node, "CompanyName", "");
drData["Currency"] = GetCurrency(xmlHelper.GetSingleNodeValue(node, "Currency", ""));
drData["ExchangeRate"] = xmlHelper.GetSingleNodeValue(node, "ExchangeRate", "");
drData["UnitPriceFirstRound"] = xmlHelper.GetSingleNodeValue(node, "UnitPriceFirstRound", "");
drData["UnitPriceFinal"] = xmlHelper.GetSingleNodeValue(node, "UnitPriceFinal", "");
drData["Quantity"] = xmlHelper.GetSingleNodeValue(node, "Quantity", "");
drData["Savings"] = xmlHelper.GetSingleNodeValue(node, "Savings", "");
drData["ProcurementTotal"] = xmlHelper.GetSingleNodeValue(node, "ProcurementTotal", "");
drData["LeadTime"] = xmlHelper.GetSingleNodeValue(node, "LeadTime", "");
drData["TermsTrade"] = xmlHelper.GetSingleNodeValue(node, "TermsTrade", "");
drData["PaymentMethods"] = xmlHelper.GetSingleNodeValue(node, "PaymentMethods", "");
drData["PaymentRemark"] = xmlHelper.GetSingleNodeValue(node, "PaymentRemark", "");
drData["Remark"] = xmlHelper.GetSingleNodeValue(node, "Remark", "");
dt.Rows.Add(drData);
}
}
else
{
for (int index2 = 0; index2 < group; index2++) //表示大于一组的数据,需要列出的组数;
{
AddTitleRow(dt);
for (int index3 = index2 * 3; index3 < index2 * 3 + 3; index3++)
{
DataRow drData = dt.NewRow();
drData["orgCheckBox"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "orgCheckBox", "");
drData["CompanyName"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "CompanyName", "");
drData["Currency"] = GetCurrency(xmlHelper.GetSingleNodeValue(gridSupplier[index3], "Currency", ""));
drData["ExchangeRate"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "ExchangeRate", "");
drData["UnitPriceFirstRound"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "UnitPriceFirstRound", "");
drData["UnitPriceFinal"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "UnitPriceFinal", "");
drData["Quantity"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "Quantity", "");
drData["Savings"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "Savings", "");
drData["ProcurementTotal"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "ProcurementTotal", "");
drData["LeadTime"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "LeadTime", "");
drData["TermsTrade"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "TermsTrade", "");
drData["PaymentMethods"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "PaymentMethods", "");
drData["PaymentRemark"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "PaymentRemark", "");
drData["Remark"] = xmlHelper.GetSingleNodeValue(gridSupplier[index3], "Remark", "");
dt.Rows.Add(drData);
}
}
AddTitleRow(dt);
for (int index4 = group * 3; index4 < gridSupplier.Count; index4 ++) //表示剩余的行数,即转变成相应的列数;
{
DataRow drData = dt.NewRow();
drData["orgCheckBox"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "orgCheckBox", "");
drData["CompanyName"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "CompanyName", "");
drData["Currency"] = GetCurrency(xmlHelper.GetSingleNodeValue(gridSupplier[index4], "Currency", ""));
drData["ExchangeRate"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "ExchangeRate", "");
drData["UnitPriceFirstRound"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "UnitPriceFirstRound", "");
drData["UnitPriceFinal"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "UnitPriceFinal", "");
drData["Quantity"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "Quantity", "");
drData["Savings"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "Savings", "");
drData["ProcurementTotal"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "ProcurementTotal", "");
drData["LeadTime"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "LeadTime", "");
drData["TermsTrade"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "TermsTrade", "");
drData["PaymentMethods"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "PaymentMethods", "");
drData["PaymentRemark"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "PaymentRemark", "");
drData["Remark"] = xmlHelper.GetSingleNodeValue(gridSupplier[index4], "Remark", "");
dt.Rows.Add(drData);
}
}
}
else
{
for (int index5 = 0; index5 < group; index5++) //表示大于一组的数据,需要列出的组数;
{
AddTitleRow(dt);
for (int index6 = index5 * 3; index6 < index5 * 3 + 3; index6++)
{
DataRow drData = dt.NewRow();
drData["orgCheckBox"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "orgCheckBox", "");
drData["CompanyName"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "CompanyName", "");
drData["Currency"] = GetCurrency(xmlHelper.GetSingleNodeValue(gridSupplier[index6], "Currency", ""));
drData["ExchangeRate"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "ExchangeRate", "");
drData["UnitPriceFirstRound"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "UnitPriceFirstRound", "");
drData["UnitPriceFinal"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "UnitPriceFinal", "");
drData["Quantity"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "Quantity", "");
drData["Savings"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "Savings", "");
drData["ProcurementTotal"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "ProcurementTotal", "");
drData["LeadTime"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "LeadTime", "");
drData["TermsTrade"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "TermsTrade", "");
drData["PaymentMethods"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "PaymentMethods", "");
drData["PaymentRemark"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "PaymentRemark", "");
drData["Remark"] = xmlHelper.GetSingleNodeValue(gridSupplier[index6], "Remark", "");
dt.Rows.Add(drData);
}
}
}
}
return dt;
}
/// <summary>
/// 每3条记录,添加1条属性集记录:
/// </summary>
/// <param name="dt"></param>
private void AddTitleRow(DataTable dt)
{
string[] strTitle=new string[] { "推荐", "公司名", "币种", "汇率", "单价(第一轮)", "单价(最终)", "数量", "节省费用(CNY)", "采购总价(CNY)", "订货提前期(天)", "贸易条款", "支付方式", "支付说明", "备注" };
DataRow drTitle = dt.NewRow();
for (int i = 0; i < strTitle.Length; i++)
{
drTitle[i] = strTitle[i];
}
dt.Rows.Add(drTitle);
}
/// <summary>
/// 创建表数据列字段:
/// </summary>
/// <returns></returns>
private string[] GetFieldKeys()
{
return new string[] { "orgCheckBox", "CompanyName", "Currency", "ExchangeRate", "UnitPriceFirstRound", "UnitPriceFinal", "Quantity", "Savings", "ProcurementTotal", "LeadTime", "TermsTrade", "PaymentMethods", "PaymentRemark", "Remark" };
}
/// <summary>
/// 创建表中的列
/// </summary>
/// <returns></returns>
private DataTable CreateDataTableColumn(int type)
{
DataTable dt = new DataTable();
switch(type)
{
case 1:
foreach (string columnName in this.GetFieldKeys())
{
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = columnName;
dt.Columns.Add(column);
}
break;
case 2:
string[] columns = new string[] {"title","data01","data02","data03"};
foreach(string columnName in columns)
{
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = columnName;
dt.Columns.Add(column);
}
break;
}
return dt;
}
/// <summary>
/// 根据code过去对应的币种;
/// </summary>
/// <param name="resCode">code</param>
/// <returns>币种</returns>
private string GetCurrency(string resCode)
{
DataTable dt = resCmp.GetResource(resCode); ;
return dt.Rows[0]["Res_Name"].ToString();
}
}
调试:
- 将数据行转列分组显示
- 根据记录分组、将数据动态纵向显示
- Ext:分组显示数据
- ListView 分组 显示网络数据
- 将类似数据用空行、空列进行分组显示可以使阅读者更加容易搜索和比较数据
- silverlight 中DataGrid分组,分组名中午显示,分组数据ID转为Name显示
- 将数据二维显示
- Extjs分组显示数据的做法
- UTableView分组(section)显示数据
- Report报表对数据进行分组显示
- 对保存数据进行月份分组显示
- ExpandableListView 显示分组数据VS ListView显示列表数据
- 润乾报表数据分组时通过“根格”将数据分组后再分组
- 将分组页进行按分组页码从重从头显示并统计总页数
- swift uitableview 中实现分组,将cell分组显示,类似微信的好友界面
- 用jq将html元素根据属性中的数据分组
- C#之LINQ基础 使用group将数据分组
- Ext GroupingView 生成可分组显示的网格数据
- 对java的总结
- JTable中向某一列添加JRadioButton
- POJ 2244 再谈约瑟夫问题
- 本地DNS解析----Hosts
- ios单元测试相关文章
- 将数据行转列分组显示
- 字符串的完美度
- 解决MySQL:1042错误-Can't get hostname for your address
- 自己动手写Web自动化测试框架
- 关于zend studio 8的4空格替换tab
- 用例子来说明面向对象和面向过程的区别
- jni string handle
- Windows7中出现“文件正在被另一个人或程序使用”
- mysql中text,longtext,mediumtext字段类型的意思,以及区别