0

ネストされたリピーター コントロールを使用して年ごとにアルバムを表示しています

出力は次のようになります

-- アルバム 1 アルバム 2 アルバム 3 アルバム 4 [画像詳細]

-- アルバム 1 アルバム 2 アルバム 3 アルバム 4 [画像詳細]

-- アルバム 1 アルバム 2 アルバム 3 アルバム 4 [画像詳細]

解決済み: パネルの間違った名前について言及していましたPanel pnl = (Panel)e.Item.FindControl("pnlMore");

Twoステートメントに「//Generates Error」とコメントすると、コードは正常に機能します。このコードから、特定の[IMG More]年に4つ以上のアルバムがある場合は画像を表示したいのですが、それ以外の場合は非表示にします。

次のコード行はエラーを生成します

pnl.Visible = true; //Generates Errorまたpnl.Visible = false; //Generates Error

エラー メッセージ: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

親リピーター制御rptAlbumsCategories& 子リピーター制御rptAlbums

これがエラーを生成する理由がわかりません。

同じことを行うためのより良い方法があれば、私は感謝します。

protected void rptAlbumCategory_ItemBound(Object Sender, RepeaterItemEventArgs e)
{
    try
    {
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = (DataRowView)e.Item.DataItem;
        int year = Convert.ToInt32(drv["Year"]);
        Repeater Repeater2 = (Repeater)e.Item.FindControl("rptAlbums");
            Panel pnl = (Panel)e.Item.FindControl("pnlNext");
        //Control pnl = (Control)e.Item.FindControl("pnlNext");
        Repeater2.DataSource = getAlbumsYear(year, pnl);
        Repeater2.DataBind();
    }
        }
    catch (Exception ex)
    {
        throw ;
    }
}

private DataTable getAlbumsYear(int year, Panel pnl)
{
    try
    {
        DataSet ds = new DataSet();
        string strSql = "SELECT TOP 4 AlbumID, AlbumName, AlbumIcon FROM Album";
        strSql += " DATEPART(YYYY,AlbumDate) = " + year;
        strSql += " ORDER BY AlbumDate DESC ";
        ds = DataProvider.Connect_Select(strSql);
        DataTable dt = ds.Tables[0];
        //Code to show Next arrow
        string strSql2 = "SELECT AlbumID, AlbumName, AlbumIcon FROM Album ";
        strSql2 += "WHERE DATEPART(YYYY,AlbumDate) = " + year;
        DataSet ds2 = new DataSet();
        ds2 = DataProvider.Connect_Select(strSql2);
        if (ds2.Tables[0].Rows.Count > 3)
        {
            pnl.Visible = true;  //Generates Error
        }
        else
        {
            pnl.Visible = false; //Generates Error
        }
        return dt;
    }
    catch (Exception ex)
    {
        throw;
    }
}

コード

<asp:Repeater ID="rptAlbumsCategories" runat="server" OnItemDataBound="rptAlbumCategory_ItemBound">
                <ItemTemplate>
                    <div class="AlbumCategory">
                        <asp:HyperLink ID="hyplnkCat1" runat="server" NavigateUrl='<%# Eval("Year")%>'>
                        <div id="AlbumCatbyYear" class="AlbumCatbyYear"  >
                            <asp:Label ID="lblAlbumYear" runat="server" Text='<%# Eval("Year")%>'></asp:Label>
                        </div>
                        </asp:HyperLink>
                    </div>
                    <div class="AlbumCatWrapper">
                        <asp:Repeater ID="rptAlbums" runat="server" >
                        <ItemTemplate>
                            <asp:HyperLink ID="hylnkToAlbum" NavigateUrl='<%# getAlbumURL(Eval("AlbumID")) %>' runat="server" >
                            <div class="PGImageFrame">
                                <div class="boxgrid  captionfull"> 
                                <asp:Image ID="Image1" ImageUrl='<%# getAlbumImagePath(Eval("AlbumIcon")) %>' AlternateText='<%# Eval("AlbumName") %>'  runat="server" />

                                    <div class="cover  boxcaption">
                                        <asp:Label ID="lblAlbumTitle"  runat="server" Text='<%# Eval("AlbumName") %>'></asp:Label>
                                    </div>
                                </div>
                            </div>
                            </asp:HyperLink>
                        </ItemTemplate>
                        </asp:Repeater>
                        <asp:Panel ID="pnlMore" runat="server" Visible="false">
                            <asp:Image ID="imgNext" runat="server" ImageUrl="~/Images/PG-Next.png" />
                        </asp:Panel>
                    </div>
                </ItemTemplate>
            </asp:Repeater>
4

1 に答える 1

0

解決済み: パネル コントロールの間違った名前について言及していました

Panel Panel pnl = (Panel)e.Item.FindControl("pnlMore");
于 2012-09-05T10:14:02.560 に答える