2014-11-01 3 views
0

Я успешно отображается список категорий и их соответствующих подкатегорий с помощью вложенных элементов управления Repeater:Показать полный список категорий и подкатегорий с помощью Repeater

.aspx

<asp:Repeater ID="rMainCategories" runat="server" OnItemDataBound="rMainCategories_ItemDataBound"> 
    <ItemTemplate> 
     <li> 
      <asp:Label ID="lblCategoryName" runat="server" 
       Text='<%# Eval("MainCategory") %>' /> 
     </li> 
     <ul> 
      <asp:Repeater ID="rSubCategories" runat="server"> 
       <ItemTemplate> 
        <li> 
         <asp:HyperLink ID="hlProductName" runat="server" Text='<%# Eval("SubCategory")%>' /> 
        </li> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ul> 
    </ItemTemplate> 
</asp:Repeater> 

.aspx.cs

void GetCategories() 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandText = "SELECT m.MainCatID, m.Category AS MainCategory " + 
     "FROM MainCategories m WHERE m.MainCatID " + 
     "IN (SELECT MainCatID FROM SubCategories) " + 
     "SELECT s.SubCatID, s.Category AS SubCategory, s.MainCatID FROM SubCategories s"; 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 

    ds.Relations.Add(new DataRelation("CategoriesRelation", ds.Tables[0].Columns["MainCatID"], 
     ds.Tables[1].Columns["MainCatID"])); 
    rMainCategories.DataSource = ds.Tables[0]; 
    rMainCategories.DataBind(); 
    con.Close(); 
} 

protected void rMainCategories_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || 
    e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     DataRowView drv = e.Item.DataItem as DataRowView; 
     Repeater rSubCategories = e.Item.FindControl("rSubCategories") as Repeater; 
     rSubCategories.DataSource = drv.CreateChildView("CategoriesRelation"); 
     rSubCategories.DataBind(); 
    } 
} 

Выход

list of main categories with sub categories

Список основных категорий

list of main categories

Есть ли способ я могу отобразить категории без подкатегории? Просьба сообщить. Спасибо.

+1

Вы хотите показать категории, у которых нет подкатегорий ??? –

+0

@Ganesh_Devlekar Да. Полный список категорий. – abramlimpin

ответ

0

попробовать так:

Я предлагаю вам связать ваш Основные категории для Repeater в этом методе GetCategories()

public Void GetCategories() 
{ 
rMainCategories.datasource=dt ;  // select * from MainCategories 
rMainCategories.DataBind(); 

} 

Fetch Like данных и Сохранить в Session[subcategory]

select * from subcategories where MainCatid in 
(select MainCad ID from Categories) 

И В Метод DataBound Связывает ваши подкатегории

protected void rMainCategories_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || 
    e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     DataRowView drv = e.Item.DataItem as DataRowView; 
     Repeater rSubCategories = e.Item.FindControl("rSubCategories") as Repeater; 
     // save MainCatID in rMainCategories 
     Label lblMainCatID=(Label)e.Item.FindControl(lblMainCatID); 

    DataTable subcat=(DataTable)Session[subcategory]; 

    rSubCategories.DataSource = dt;  // filter subcate with MainCatID 
    rSubCategories.DataBind(); 
} 
} 
+0

Я хочу отобразить список основных категорий (с подкатегориями или без них) – abramlimpin

+0

@abramlimpin Пожалуйста, покажите несколько примеров и ожидаемый результат –

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