C# 将值输出到HTML表

C# 将值输出到HTML表,c#,html,.net,C#,Html,.net,我知道必须有一个更干净,更简洁的方法来做到这一点。。。但我不会在谷歌上搜索它。基本上,我有一组需要写入HTML表的数据 这张桌子看起来像这样(但要长得多): 我现在还不是特别喜欢,但至少我从一开始就有了很大的进步。然而 更大的问题: 我是通过连接用+=语句(cringe)构建的值字符串来构建这些行的,如下所示: string[] finalNet = new string[validSites.Count]; string[] finalGross = new string[validSites

我知道必须有一个更干净,更简洁的方法来做到这一点。。。但我不会在谷歌上搜索它。基本上,我有一组需要写入HTML表的数据

这张桌子看起来像这样(但要长得多):

我现在还不是特别喜欢,但至少我从一开始就有了很大的进步。然而

更大的问题:

我是通过连接用+=语句(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;
        }
    }
}
(在写这篇文章时,我意识到我可能可以使用一些.NET3.5魔法将我的内部foreach和嵌套在其中的if语句结合起来;我仍在学习,也希望得到这方面的指导)

这些列阵列用于百分比差异

在我所有的循环结束时,我得到了五个包含整行的数组,从
(每行19个数据单元),然后我再次在每个站点上循环(由于信息按位置存储,Store1的数据位于finalNet[0]、finalGross[0]等),并将它们写入
HtmlTextWriter

我的部分问题是,我的实际数据是垂直存储的(使用一个包含一个日期的完整列的对象-这些值是根据列标题中的日期从SQL查询中提取的)-而它必须在表中水平输出

但是,我在弄清楚如何清理这些代码并保持表的格式不变时遇到了问题。任何想法都将不胜感激。

我完全同意“Reddog”。
您应该使用gridview控件并将数据对象作为数据源传递给gridview。您还可以使用JQGrid进行客户端脚本编写。

我建议您使用视图引擎,例如。该项目是开源的,在ASP.Net运行时之外工作。通过这种方式,您可以将表示(HTML表的生成)与数据生成分开。通过这种方式,您可以按照以下代码行编写代码。假设SQL查询中的数据是面向列的(如您所建议的),并且是名为
data

可执行文件中的C代码:

var data = ...;

var template = File.ReadAllText("path/to/razor/template.cshtml");
var html = Razor.Parse(template,data); //Bind the SQL data to the HTML
Razor模板示例:

<table>
    @foreach(var row in Model) {
        <tr>
            @foreach(var col in row) {
                <td>@col</td>
            }
        </tr>
    }
</table>

@foreach(模型中的var行){
@foreach(行中的变量列){
@上校
}
}

在不了解更多代码的情况下,给您提供一个更好的示例有点困难,但我认为这将引导您朝着正确的方向前进

如果您使用ASP.NET Web表单,我建议您研究使用绑定或重复器,以允许表格式数据的数据绑定输出。我不在ASP环境中,这是一个在我的SQL server上运行的可执行文件,转储HTML页面,然后通过电子邮件发送出去。我会在DataGridView中找到相同的功能吗?我已经编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。我喜欢这个想法。。。非常感谢。我不能投赞成票,但我已记下了答案。
var data = ...;

var template = File.ReadAllText("path/to/razor/template.cshtml");
var html = Razor.Parse(template,data); //Bind the SQL data to the HTML
<table>
    @foreach(var row in Model) {
        <tr>
            @foreach(var col in row) {
                <td>@col</td>
            }
        </tr>
    }
</table>