2012-07-03 1 views
0

Photo Album Мне нужно показать фотогалерею как показано на картинке. Я храню информацию для фотогалереи в 4 разных таблицах. мне нужно показать на главной странице CategoryName и Albums вместе с их уважаемым значком и связать их с AlbumCategoryPage.aspx.Отображать данные в режиме управления вложенным ретранслятором и как передать значение parentID из родительского ретранслятора в ретранслятор ребенка, используя asp.net

Для этого я использую вложенный регулятор репитера.

Родитель Repeater покажет Категория изображения (как показывают в красном цвете), а затем показать Top 4 альбома в одной и той же категории, и поэтому в.

До сих пор я сделал это, как этот

  <asp:Repeater ID="rptAlbumCategory" runat="server" OnItemDataBound="rptAlbumCategory_ItemBound"> 
       <ItemTemplate> 
         <!-- Repeated data --> 
         <div class="AlbumRowWrapper"> 
          <div id="dAlbumCategory" class="AlbumCategoryIcon"> 
           <asp:Image ID="Image1" ImageUrl='<%# getImagePath(Eval("CategoryImage")) %>' runat="server" /> 
          </div> 
         </div> 
         <asp:Repeater ID="rptAlbums" runat="server" > 
          <ItemTemplate> 
           <!-- Nested repeated data --> 
          </ItemTemplate> 
         </asp:Repeater> 
        </ItemTemplate> 
      </asp:Repeater> 

Код За

На странице Load

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     {  //Get Gallery 
      DataSet dsAlbumCat = new DataSet(); 
      string strSql = "SELECT * FROM AlbumCategory)"; 
      dsAlbumCat = DataProvider.Connect_Select(strSql); 
      rptAlbumCategory.DataSource = dsAlbumCat; 
      rptAlbumCategory.DataBind(); 
} 
} 

protected void rptAlbumCategory_ItemBound(Object Sender, RepeaterItemEventArgs e) 
{ 

if (e.Item.ItemType == ListItemType.Item) 
{ 
    Repeater childRepeater = (Repeater)e.Item.FindControl("rptAlbumCategory"); 
    // childRepeater.DataSource = getAlbums(); 
    // childRepeater.DataBind(); 
} 

} 

protected void getAlbums() 
{ 
    DataSet dsAlbums = new DataSet(); 
    string strSql = "SELECT * FROM AlbumName WHERE CategoryID = " + CategoryID + ")"; 
    dsAlbums = DataProvider.Connect_Select(strSql); 
    rptAlbums.DataSource = dsAlbums; 
    rptAlbums.DataBind(); 
} 

protected String getImagePath(object img) 
{ 
    string url; 
    url = "~/Images/gallery/" + img; 

    return url; 
} 

С помощью этого кода я могу получить следующий результат.

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

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

Структура таблицы

TABLE AlbumCategory 
CategoryID 
CategoryName 
CategoryImageIcon 
CategoryVisible 
LanguageID 

TABLE AlbumName 
AlbumID 
AlbumName 
AlbumDescription 
AlbumImageIcon 
CategoryID 
LanguageID 

Я был бы признателен за помощь в этом отношении даже лучше подход к выполнить такую ​​же конструкцию, как показано на первом изображении

+0

** решаемые ** Я сделал изменения в свой код в соответствии со следующей статьей, и теперь он работает как шарм. http://www.devasp.net/net/articles/display/1372.html Я все еще открыт для лучшего или легкого подхода – Learning

ответ

1

Попробуйте

Dim ds As DataSet = getCategoriesAndName() 
    ds.Relations.Add("relation_category", ds.Tables(0).Columns("CategoryID"), ds.Tables(1).Columns("CategoryID")) 
    rptAlbumCategory.DataSource = ds 
    rptAlbumCategory.DataBind() 

getCategoriesAndName() вернет набор данных, содержащий два типа данных (категории и имена). Тогда на

Protected Sub rptAlbumCategory_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptAlbumCategory.ItemDataBound 
    Dim rptrAlbums As Repeater = TryCast(e.Item.FindControl("rptrAlbums"), Repeater) 
    rptrAlbums.DataSource = TryCast(e.Item.DataItem, DataRowView).CreateChildView("relation_category") 
    ' Bind the child repeater 
    rptrAlbums.DataBind() 
End Sub 

Я думаю, что это проще :-)