これを行うには、よりクリーンで簡潔な方法が必要であることを私は知っています...しかし、私はそれをグーグルで試しているところはどこにもありません。基本的に、HTMLテーブルに書き込む必要のあるデータセットがあります。
テーブルは次のようになります(ただし、はるかに長くなります)。
DOB SDLW SDLY WTD LWTD 開始日:2013年3月6日2013年2月27日2012年7月3日2013年4月3日2013年2月25日 終了日:2013年3月6日2013年2月27日 売上高5,661.474,876.8216.1%5,765.33 -1.8%13,941.10 13,310.09 4.7% 総売上高6,499.145,549.9417.1%6,602.71 -1.6%16,046.50 15,306.56 4.8% ゲスト数369.00317.0016.4%392.00 -5.9%920.00 872.00 5.5% 合計コンプ187.29102.4682.8%163.19 4.8%499.74 455.82 9.6% 総ボイド56.2551.0510.2%131.65 -57.3%161.05 227.83 -29.3%
署名記事の問題:
もともと私はこれを使用して書いていましたが、それぞれHtmlTextWriter
を呼び出さなければならないため、信じられないほどの量の(ノイズの多い)コードが作成されました。次にラッパーに移動したので、セルを1行のコードに減らすことができます。AddAttribute()
<td>
public string wrapAmntCell(Object input)
{
return "<td align=\"right\">" + string.Format("{0:n}", input) + " " + "</td>";
}
私はまだ特に好きではありませんが、私は始めたところから少なくとも大幅に改善しました。でも...
全体像の問題:
+ =ステートメント(cringe)で作成された値の文字列を連結してこれらの行を作成しているということですか、次のようになります。
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>
(1行あたり19セルのデータ)からの完全な行を含む5つの配列が作成され、各サイトに再度ループバックします(情報が位置的に保存されるため、Store1のデータが配置されます)。 finalNet [0]、finalGross [0]などで)、それらをに書き込みますHtmlTextWriter
。
私の問題の一部は、実際のデータが垂直方向に保存されることです(1つの日付の完全な列を含むオブジェクトを使用します-これらの値は列ヘッダーの日付に基づいてSQLクエリから取得されます)-水平方向に出力する必要がありますテーブル。
ただし、このコードをクリーンアップしてテーブルの形式をそのまま維持する方法を理解するのに問題があります。どんな考えでも大歓迎です。