首页 > 解决方案 > 在 C# 的 for 循环中从列表中获取数据

问题描述

我正在尝试循环浏览列表并为列表中的每个站点创建一个新表

我的控制器看起来像这样

 List<string> OffReportColumns = new List<string>(7);     
 List<List<string>> OffReportRows = new List<List<string>>();   
            foreach (Site s in sites)
            {                           
                OffReportColumns.Add(s.Name);
                OffReportColumns.Add("");
                OffReportColumns.Add("");
                OffReportColumns.Add("Average Cost");
                OffReportColumns.Add("");
                OffReportColumns.Add("");
                OffReportColumns.Add("Average Cost With Labour");

   OffReportRows.Add(new List<string>
                {
                    "Parts",
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2"),
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2")
                });
            }

我的视图看起来像这样

@foreach (Site s in sites)
        {
            <tr style="color:black">
                @foreach (var col in ViewBag.OffReportColumns)
                {
                    <th>@col </th>
                }            
            </tr>
            <tr style="color:black">
                   @foreach (var cell in ViewBag.OffReportRows)
                   {
                       <td>@cell</td>
                   }
            </tr>
        }

目前这使页面看起来像 页

但我相反希望它被布局,所以它看起来像这样

"Eric Car Stock " "Average Cost" "Average Cost with Labour"

"In-House Use " "Average Cost" "Average Cost with Labour"

"Havey Kuhar's Car Stock " "Average Cost" "Average Cost with Labour"

每个表下面都有与其站点对应的数据

我怎样才能改变我的代码来完成这个?

我试过的

在我看来,我首先尝试让我的代码执行此操作

//Removed for foreach (Site s in sites)

   @foreach (var row in ViewBag.OffReportRows)

             <tr style="color:black">
                    @foreach (var cell in ViewBag.OffReportRows)
                    {
                        <td>@cell</td>
                    }
             </tr>
            }

但这只会扩展列表而不是创建新列表

标签: c#htmlcsslist

解决方案


在第一个代码片段中,所有网站的所有列都添加到一个列表中。2 维正在变成 1 维。没有循环,它有效地写成

OffReportColumns.Add("Eric Car Stock ");
OffReportColumns.Add("");
OffReportColumns.Add("");
OffReportColumns.Add("Average Cost");
OffReportColumns.Add("");
OffReportColumns.Add("");
OffReportColumns.Add("Average Cost With Labour");

OffReportColumns.Add("In-House Use ");
OffReportColumns.Add("");
OffReportColumns.Add("");
OffReportColumns.Add("Average Cost");
OffReportColumns.Add("");
OffReportColumns.Add("");
OffReportColumns.Add("Average Cost With Labour");

OffReportColumns.Add("Havey Kuhar's Car Stock ");
OffReportColumns.Add("");
OffReportColumns.Add("");
OffReportColumns.Add("Average Cost");
OffReportColumns.Add("");
OffReportColumns.Add("");
OffReportColumns.Add("Average Cost With Labour");

第二个代码片段说,“对于每个站点,其中有 3 个,创建一个表格行。在每一行中,对于每个 OffReportColumns,其中有 21 个,创建一个包含来自内部循环的文本的表格列。

这就是为什么所有站点的所有列都出现在 3 行中的每一行上。

更好的方法是根本没有OffReportColumns列表。相反,视图可以这样写

@foreach (Site s in sites)
{
    <tr>
        <td>@s.Name</td>
        <td></td>
        <td></td>
        <td>Average Cost</td>
        <td></td>
        <td></td>
        <td>Average Cost With Labour</td>
    </tr>
}

这将为每个站点创建一行 7 列。每行的第一列将是站点的名称。


推荐阅读