0

フォトアルバム 画像のようにフォトギャラリーを表示する必要があります。フォト ギャラリーの情報を 4 つの異なるテーブルに格納します。メイン ページの CategoryName と Albums に、それらのアイコンと共に表示し、それらを AlbumCategoryPage.aspx にリンクする必要があります。

これを達成するために、ネストされたリピーター コントロールを使用しています。

親リピーターはカテゴリ画像を表示し(赤色で表示)、同じカテゴリのトップ 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>

コードビハインド

ページ読み込み時

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

このコードを使用すると、次の結果を得ることができます。 ここに画像の説明を入力

関連するアルバムが表示されるように、親リピーターから子リピーターに CategoryID を渡す方法がわかりません。

ネストされたリピーターを初めて使用していますが、シナリオに関連する完全な例が見つからないため、混乱を招きます

テーブル構造

TABLE AlbumCategory
CategoryID
CategoryName
CategoryImageIcon
CategoryVisible
LanguageID

TABLE AlbumName
AlbumID
AlbumName
AlbumDescription
AlbumImageIcon
CategoryID
LanguageID

この点で、最初の画像に表示されているものと同じデザインを達成するための最良のアプローチでも助けていただければ幸いです

4

1 に答える 1

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() は、2 つのデータテーブル (カテゴリと名前) を持つデータセットを返します。それから

 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

これは簡単だと思います:-)

于 2012-07-03T11:34:46.027 に答える