2014-12-17 3 views
0

Я пытаюсь отобразить структуру древовидной структуры для maintower и вычитания (вычитание должно отображаться под главной строкой) в mvc4. Я использовал приведенный ниже код в представлении. Он отображает структуру, как,Как отобразить структуру дерева для данных базы данных в MVC4

maintower1 
    subtower1 
maintower1 
    subtower2 

, но я хочу, чтобы отобразить как

maintower1 
    subtower1 
    subtower2 

Может кто-нибудь мне помочь, пожалуйста?

@foreach (System.Data.DataRow dr in ViewBag.treedata.Rows) 
{ 
    <div id="treeview"> 
    @if(maintower != @Html.Encode(dr[0])) 
    { 
     maintower = @Html.Encode(dr[0]); 

     <ul> 
      <li>@Html.Encode(dr[0]) 
       <ul> 

        @foreach (System.Data.DataRow drow in ViewBag.treedata.Rows) 
        { 
         if(maintower == @Html.Encode(drow [0])) 
         { 
         <a href="~/Home/Index"><li> @Html.Encode(drow [1]) </li></a> 
         } 
        } 

       </ul> 
      </li> 
     </ul> 
     } 
</div> 
} 

ответ

1

Перед выполнением следующих шагов убедитесь, что ваш ViewBag.treedata в порядке своей колонке 0 (Сортировать по ViewBag.treedata.Column [0])

<body style="font-family : Arial; "> 
    @{ 
    var name = ""; 
    } 

    @foreach (System.Data.DataRow dr in ViewBag.treedata.Rows) 
    { 
     <div id="treeview"> 
     if(name != @Html.Encode(dr[0])) 
     { 
      name = @Html.Encode(dr[0]); 

      <ul> 
       <li>@Html.Encode(dr[0]) 
        <ul> 

         @foreach (System.Data.DataRow drow in ViewBag.treedata.Rows) 
         { 
          if(name == @Html.Encode(drow [0]) 
          { 
           <li>@Html.Encode(drow [1])</li> 
          } 
         } 

        </ul> 
       </li> 
      </ul> 
      } 
    </div> 
    } 
</body> 
+0

Большое спасибо за помощь. Это работает хорошо. – user3793029

+0

Звучит неплохо. Добро пожаловать. – Aravindan

+0

Еще одна помощь PLS, для каждой подделки, я должен ящики связывать таким образом, что если я clik subtower1, он должен перейти к соответствующей странице и то же самое для других субтитров тоже. Если я использовал @ Html.Encode (дроу [1]), очевидно, что та же самая страница отображается для всех подкатегорий. не могли бы вы посоветовать мне, как это сделать? – user3793029

0

Вы должны использовать две петли один для Главная башня и один для subtower

Или что-то вроде этого

@{var previousMainTower = String.Empty; 
    var closePreviousTag = false;} 
<div id="treeview"> 
    <ul> 
    @foreach (System.Data.DataRow dr in ViewBag.treedata.Rows) 
    { 

     @if(previousMainTower != dr[0]) 
     { 
      if(closePreviousTag) 
      { 
       </ul> 
       </li> 
      } 
      <li>@Html.Encode(dr[0]) 
      <ul> 
       <li>@Html.Encode(dr[1])</li> 
      @closePreviousTag = false; 
     } 
     else 
     { 
      <li>@Html.Encode(dr[1])</li> 
      @closePreviousTag = true; 
     } 
     @previousMainTower = dr[0] 
    } 
    </ul> 
</div> 

Это не полностью рабочий код, это показывает, как следует понял.

Короче говоря, вы должны проверять каждый шаг цикла, если текущая «maintower» такая же, как в предыдущем степе, и если она равна, то не создавайте ее.

+0

Привет, Спасибо за обновление. Но я уже пробовал использовать два цикла: один для главной и еще один для подиума, который приведен как для каждой maintower, так и для всей вычеты. Но я хочу отображать вычитание, равное maintower, только должно отображаться. – user3793029

+0

Если вы хотите использовать две петли во втором (вложенный цикл), вы должны проверить имя maintower и добавить выветривание, только если имена равны. – Marcin

+0

Привет, Спасибо за руководство. – user3793029

Смежные вопросы