我知道必须有一种更清洁、更简洁的方法来做到这一点......但我没有任何地方试图谷歌搜索它。基本上,我有一组数据需要写入 HTML 表。
表格看起来像这样(但更长):
DOB SDLW SDLY WTD LWTD 开始日期: 03/06/2013 02/27/2013 03/07/2012 03/04/2013 02/25/2013 结束日期:2013 年 3 月 6 日 2013 年 2 月 27 日 净销售额 5,661.47 4,876.82 16.1% 5,765.33 -1.8% 13,941.10 13,310.09 4.7% 总销售额 6,499.14 5,549.94 17.1% 6,602.71 -1.6% 16,046.50 15,306.56 4.8% 客人数量 369.00 317.00 16.4% 392.00 -5.9% 920.00 872.00 5.5% 总收入 187.29 102.46 82.8% 163.19 4.8% 499.74 455.82 9.6% 总无效 56.25 51.05 10.2% 131.65 -57.3% 161.05 227.83 -29.3%
副线问题:
最初我是使用 . 编写的HtmlTextWriter
,但是不得不AddAttribute()
为每个调用<td>
生成大量(嘈杂的)代码。然后我转向包装器,所以我至少可以将一个单元格减少为一行代码:
public string wrapAmntCell(Object input)
{
return "<td align=\"right\">" + string.Format("{0:n}", input) + " " + "</td>";
}
我仍然不是特别喜欢,但我至少在我开始的地方有了显着改善。然而...
大局问题:
是我通过连接使用 += 语句(畏缩)构建的值字符串来构建这些行,如下所示:
string[] finalNet = new string[validSites.Count];
string[] finalGross = new string[validSites.Count];
string[] finalGC = new string[validSites.Count];
string[] finalComp = new string[validSites.Count];
string[] finalVoid = new string[validSites.Count];
foreach (string num in validSites)
{
//SDLY
foreach (DataStore sdlyTmp in sdly)
{
if (sdlyTmp.siteNumber.Equals(num))
{
finalNet[countTD] += wrapAmntCell(sdlyTmp.netSales);
finalGross[countTD] += wrapAmntCell(sdlyTmp.grossSales);
finalGC[countTD] += wrapAmntCell(sdlyTmp.guestCount);
finalComp[countTD] += wrapAmntCell(sdlyTmp.compTotal);
finalVoid[countTD] += wrapAmntCell(sdlyTmp.voidTotal);
tmpCol03[0] = sdlyTmp.netSales;
tmpCol03[1] = sdlyTmp.grossSales;
tmpCol03[2] = sdlyTmp.guestCount;
tmpCol03[3] = sdlyTmp.compTotal;
tmpCol03[4] = sdlyTmp.voidTotal;
//percentage diff
finalNet[countTD] += wrapPctCell(getPctDiff(tmpCol01[0], tmpCol03[0]));
finalGross[countTD] += wrapPctCell(getPctDiff(tmpCol01[1], tmpCol03[1]));
finalGC[countTD] += wrapPctCell(getPctDiff(tmpCol01[2], tmpCol03[2]));
finalComp[countTD] += wrapPctCell(getPctDiff(tmpCol01[3], tmpCol03[3]));
finalVoid[countTD] += wrapPctCell(getPctDiff(tmpCol01[4], tmpCol03[4]));
//end diffs
totalsCol03[0] += sdlyTmp.netSales;
totalsCol03[1] += sdlyTmp.grossSales;
totalsCol03[2] += sdlyTmp.guestCount;
totalsCol03[3] += sdlyTmp.compTotal;
totalsCol03[4] += sdlyTmp.voidTotal;
}
}
}
(在写这篇文章时,我意识到我可能会使用一些 .NET 3.5 魔法将我的内部 foreach 和嵌套在其中的 if 语句结合起来;我仍在学习,并且也希望得到这方面的指导)
这些 Col 数组用于百分比差异。
在所有循环结束时,我得到了五个包含完整行的数组,来自<tr>...</tr>
(每行 19 个数据单元),然后我再次循环返回 foreach 站点(因为信息是按位置存储的,所以 Store1 的数据位于在 finalNet[0]、finalGross[0] 等)并将它们写入HtmlTextWriter
.
我的部分问题是我的实际数据是垂直存储的(使用包含一个日期的完整列的对象 - 这些值是根据列标题中的日期从 SQL 查询中提取的) - 而它必须水平输出桌子。
但是,我在弄清楚如何清理此代码并保持表格格式不变时遇到了问题。任何想法将不胜感激。