Получение данных из списка в течение l oop in C# - PullRequest
2 голосов
/ 17 марта 2020

Я пытаюсь прокрутить список и создать новую таблицу для каждого сайта в моем списке

Мой контроллер выглядит так

 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>
        }

В настоящее время это делает страницу похожей на Page

Но вместо этого я хочу, чтобы она была выложена так, чтобы она выглядела так

"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"

Каждая таблица будет содержать данные, соответствующие их сайту

Как я могу изменить свой код чтобы выполнить sh это?

Что я пробовал

На мой взгляд, я сначала попытался, чтобы мой код сделал это

//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>
            }

Но это будет только расширять списки вместо создания новых списков

Ответы [ 3 ]

2 голосов
/ 17 марта 2020

В первом фрагменте кода все столбцы для всех сайтов добавляются в один список. 2 измерения становятся 1 измерением. Без l oop он фактически записывается как

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, создайте столбец таблицы с текстом из внутреннего l oop.

Именно поэтому все столбцы со всех сайтов появляются в каждой из 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 столбцов для каждого сайта. Первый столбец каждого Строка будет названием сайта.

2 голосов
/ 17 марта 2020

Как вы указали в своем комментарии, есть два столбца: stati c data и единственные динамические c данные - сайт может просто l oop бросать сайты и отображать их следующим образом

    @foreach (Site s in sites)
    {
        <tr style="color:black">
        <td>@Site</td>
        <td>Average Cost</td>
        <td>Average Cost with Labour</td>
        </tr>
    }

Вы также можете удалить добавление столбцов в список и viewbag в вашем контроллере, так как они не нужны.

0 голосов
/ 17 марта 2020

Я думаю, что вы можете реализовать несколько вещей в первую очередь, я бы попытался изменить размер столбца col-xs-3 https://www.w3schools.com/bootstrap/bootstrap_grid_examples.asp

Если это не сработает, попытайтесь свернуть два объединения в 1 colspan = "2" https://getbootstrap.com/docs/4.0/content/tables/

наконец я бы попробовал свойство class = "vw-100" https://getbootstrap.com/docs/4.4/utilities/sizing/

Я приведу простой пример чтобы вы могли реализовать его, откройте его в полном окне, чтобы увидеть его правильно

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container-fluid">
  <h1>Hello World!</h1>
  <p>Resize the browser window to see the effect.</p>
  <p>The columns will automatically stack on top of each other when the screen is less than 768px wide.</p>
  <div class="row">
    <div class="col-sm-4" style="background-color:lavender;">.col-sm-4</div>
    <div style="background-color:lavenderblush;">.col-sm-4</div>
    <div class="col-sm-9" style="background-color:lavenderblush;">.col-sm-4</div>
    <div  style="background-color:lavender;">.col-sm-4</div>
  <br>
    <div style="background-color:lavender;">.col-sm-4</div>
    <div style="background-color:lavenderblush;">.col-sm-4</div>
    <div style="background-color:lavenderblush;">.col-sm-4</div>
    <div style="background-color:lavender;">.col-sm-4</div>
  <br>
    <div class="col-sm-1" style="background-color:lavender;">.col-sm-4</div>
    <div class="col-sm-1" style="background-color:lavenderblush;">.col-sm-4</div>
    <div class="col-sm-1" style="background-color:lavenderblush;">.col-sm-4</div>
    <div class="col-sm-1" style="background-color:lavender;">.col-sm-4</div>
    <br><br>
    <div class="col-sm-3" style="background-color:lavender;">.col-sm-4</div>
    <div class="col-sm-3" style="background-color:lavenderblush;">.col-sm-4</div>
    <div class="col-sm-3" style="background-color:lavenderblush;">.col-sm-4</div>
    <div class="col-sm-3" style="background-color:lavender;">.col-sm-4</div>
  </div>
</div>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...