C# 子中继器控件在嵌套中继器中使用时无法隐藏或显示面板控件
我使用嵌套的repeater控件按年份显示相册 输出应该是这样的 年度 --唱片集1唱片集2唱片集3唱片集4[IMG更多信息] 年度 --唱片集1唱片集2唱片集3唱片集4[IMG更多信息] 年度 --唱片集1唱片集2唱片集3唱片集4[IMG更多信息] 已解决:我提到了面板的错误名称C# 子中继器控件在嵌套中继器中使用时无法隐藏或显示面板控件,c#,asp.net,repeater,webforms,nested-repeater,C#,Asp.net,Repeater,Webforms,Nested Repeater,我使用嵌套的repeater控件按年份显示相册 输出应该是这样的 年度 --唱片集1唱片集2唱片集3唱片集4[IMG更多信息] 年度 --唱片集1唱片集2唱片集3唱片集4[IMG更多信息] 年度 --唱片集1唱片集2唱片集3唱片集4[IMG更多信息] 已解决:我提到了面板的错误名称Panel pnl=(Panel)e.Item.FindControl(“pnlMore”) 如果我用“//生成错误”注释这两条语句,代码工作正常。从这段代码中,我想显示一张图像[IMG More],如果一年的专辑超过
Panel pnl=(Panel)e.Item.FindControl(“pnlMore”)代码>
如果我用“//生成错误”注释这两条语句,代码工作正常。从这段代码中,我想显示一张图像[IMG More]
,如果一年的专辑超过4张,否则就隐藏它
下面的代码行生成错误
pnl.Visible=true//生成错误
或pnl.Visible=false//生成错误
错误消息:对象引用未设置为对象的实例
父中继器控制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;
}
}
代码
解决:我提到了错误的面板控制名称
Panel Panel pnl = (Panel)e.Item.FindControl("pnlMore");
旁注:您不应该在catch块中创建新的异常,而应该抛出相同的异常,因此不要throw ex
或(您所写的)抛出新异常(例如ToString())代码>简单地说:抛出代码>。
Panel Panel pnl = (Panel)e.Item.FindControl("pnlMore");