2013-04-05 3 views
0

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

SQL вызов:

/// <summary> 
    /// Get all of the pages on the website 
    /// </summary> 
    /// <returns></returns> 
    public static DataTable GetAllWebsitePages() 
    { 
     DataTable returnVal = new DataTable(); 
     using (SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["websiteContent"].ConnectionString)) 
     { 
      sqlCon.Open(); 
      string SQL = "SELECT * FROM Website_Pages"; 
      using (SqlCommand sqlComm = new SqlCommand(SQL, sqlCon)) 
      { 
       using (SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlComm)) 
       { 
        dataAdapter.Fill(returnVal); 
       } 
      } 
      sqlCon.Close(); 
     } 
     return returnVal; 
    } 

C#:

private void refreshPages() 
{ 
    lvPages.DataSource = CMS.WebsitePages.Pages.GetAllWebsitePages(); 
    lvPages.DataBind(); 
} 

ASP.NET:

<ItemTemplate> 
      <tr> 
       <td> 
        <asp:Label runat="server" ID="lblTitle" CssClass="cmsTitle"><%#Eval("Website_Page_Name")%></asp:Label> 
       </td> 
       <td> 
        <asp:ImageButton runat="server" ID="btnEdit" CommandArgument='<%#Eval("Website_Page_ID")%>' 
         CommandName="editPage" ImageUrl="../../images/NTU-CMS-Edit.png" /> 
        &nbsp;&nbsp;&nbsp; 
        <asp:ImageButton runat="server" ID="btnDelete" CommandArgument='<%#Eval("Website_Page_ID")%>' 
         CommandName="deletePage" OnClientClick="return confirm('Do you want to delete this page?');" 
         ImageUrl="../../images/NTU-CMS-Delete.png" /> 
       </td> 
      </tr> 
     </ItemTemplate> 

В базе данных, все мои страницы имеют идентификатор и дочерние страницы имеют родительский идентификатор. Например, у нашей Истории есть родительская страница из 2, которая О нас.

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Пожалуйста, разместите несколько примеров данных и как вы хотите, чтобы они отображались на вашей странице. – Melanie

+0

Например, есть страницы (ID 1) Главная, (ID 2) О, (ID 3) Места размещения и (ID 4) Свяжитесь с нами. Я хочу добавить дочернюю страницу в «О названии нашей истории», которая будет иметь идентификатор 5 и родительский идентификатор 2. Мне нужен вертикальный список с нашей историей, чтобы он появился ниже «О», после чего я могу отступать от CSS. – lauw0203

ответ

0

Существует старая техника для сгруппированных данных, как, что - первая вещь, чтобы получить SQL для вывода чего-то вроде этого ...

Parent  Child 
---------- ---------- 
Home  Home 
Products Products 
Products Widget 
Products Midget 
Products Fidget 
About Us About Us 
About Us History 
About Us Contact Us 

Затем вы Переберите, что и потреблять каждую строку, чтобы построить ваше меню ... следующий псевдокод ...

String currentGroup = ""; 
MenuItem currentParentMenuItem = null; 
foreach(DBRow r in results) { 
    if (currentGroup != r.Group) { 
     //create a new group 
     currentGroup = r.Group; 

     //add that group as a "Parent" item 
     //Store the Parent in a MenuItem so we can add the children next time through 
     currentParentMenuItem = newParentWeCreatedAbove; 
    } else { 
     //add the current row as a child to the current Parent menu group 
     currentParentMenuItem.AddChild(r.Child); 
    } 
} 

в основном это: каждый раз, когда меняется название группы, мы создаем новую группу и добавить все ребенок в эту группу, пока имя группы снова меняется.