今天下午一直纳闷儿,因火这个DataList嵌套问题。
有两个表,ALBUM和PHOTO
ALBUM(AlbumID,AlbumName,UserName,....,UpdateTime) AlbumID是标识列,也是主键
PHOTO(PhotoID,PhotoName,AlbumName,...,PhotoFileUrl) PhotoID是标识列,也是主键现在我想
从ALBUM表中取出AlbumName,UserName,UpdateTime
从PHOTO表中取出PhotoName,PhotoFileUrl
用两个DataList嵌套一些相关代码: <asp:DataList ID="DataListOut" runat="server" DataKeyField="AlbumName" OnItemDataBound="DataListOut_ItemDataBound">
<ItemTemplate>
<table>
<tr>
<td><%# Eval("AlbumName") %></td>
<td><%# Eval("UserName") %></td>
<td><%# Eval("UpdateDate") %></td>
</tr>
</table>
<asp:DataList ID="DataLiatIn" runat="server">
<ItemTemplate>
<table>
<tr>
<td><img src='<%#Eval("PhotoFileUrl") %>' alt='<%# Eval("PhotoName") %>' /></td>
<td><%#Eval("PhotoName") %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
<HeaderTemplate>
<table>
<td>相册名</td>
<td>所属会员</td>
<td>更新日期</td>
</table>
</HeaderTemplate>
</asp:DataList> protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//外层绑定
DataListOut.DataSource = CataAccess.GetAlbumName();
DataListOut.DataBind();
}
}
protected void DataListOut_ItemDataBound(object sender, DataListItemEventArgs e)
{
//内层绑定
string albumname = DataListOut.DataKeys[e.Item.ItemIndex].ToString().Trim(); DataList dl = (DataList)e.Item.FindControl("DataListIn");
dl.DataSource = CataAccess.GetSomeAlbums(albumname);
dl.DataBind();
}
运行时,出现这个问题:index超出索引范围,必需为非负值并且小于集合大小断点调式:发现e.Item.ItemIndex 的值为0有朋友能帮我解决么,我弄了老半天呢?我的QQ181732481 不胜感激
有两个表,ALBUM和PHOTO
ALBUM(AlbumID,AlbumName,UserName,....,UpdateTime) AlbumID是标识列,也是主键
PHOTO(PhotoID,PhotoName,AlbumName,...,PhotoFileUrl) PhotoID是标识列,也是主键现在我想
从ALBUM表中取出AlbumName,UserName,UpdateTime
从PHOTO表中取出PhotoName,PhotoFileUrl
用两个DataList嵌套一些相关代码: <asp:DataList ID="DataListOut" runat="server" DataKeyField="AlbumName" OnItemDataBound="DataListOut_ItemDataBound">
<ItemTemplate>
<table>
<tr>
<td><%# Eval("AlbumName") %></td>
<td><%# Eval("UserName") %></td>
<td><%# Eval("UpdateDate") %></td>
</tr>
</table>
<asp:DataList ID="DataLiatIn" runat="server">
<ItemTemplate>
<table>
<tr>
<td><img src='<%#Eval("PhotoFileUrl") %>' alt='<%# Eval("PhotoName") %>' /></td>
<td><%#Eval("PhotoName") %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
<HeaderTemplate>
<table>
<td>相册名</td>
<td>所属会员</td>
<td>更新日期</td>
</table>
</HeaderTemplate>
</asp:DataList> protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//外层绑定
DataListOut.DataSource = CataAccess.GetAlbumName();
DataListOut.DataBind();
}
}
protected void DataListOut_ItemDataBound(object sender, DataListItemEventArgs e)
{
//内层绑定
string albumname = DataListOut.DataKeys[e.Item.ItemIndex].ToString().Trim(); DataList dl = (DataList)e.Item.FindControl("DataListIn");
dl.DataSource = CataAccess.GetSomeAlbums(albumname);
dl.DataBind();
}
运行时,出现这个问题:index超出索引范围,必需为非负值并且小于集合大小断点调式:发现e.Item.ItemIndex 的值为0有朋友能帮我解决么,我弄了老半天呢?我的QQ181732481 不胜感激
解决方案 »
- 请教asp.net中jqery读取json的问题
- 如何获得 GridView中的某一个单元格
- 求助 判断gridview中是否有数据
- 急,关于datagrid双击事件的问题
- 求C#身份证号验证函数
- 如何让MultiLine控件问题
- 一直不明白的问题 关于Controls的结构 ---Page.controls(0).controls
- 请问有没有web的textbox控件可以高亮显示html标记
- 如何在控制流程时改变字体颜色?谢谢
- 问大家一个OCX控件调用的问题
- 2个dropDownlist和txtbox的组合查询
- 怎么样把2008-12-28 17:21:35 转换成20081228172135 这样数字
<ItemTemplate>
<table>
<tr>
<td> <%# Eval("AlbumName") %> </td>
<td> <%# Eval("UserName") %> </td>
<td> <%# Eval("UpdateDate") %> </td>
</tr>
</table>
<asp:Lable id="lable1" runat="server" text='<%#Eval("AlbumName")%>'>
<asp:DataList ID="DataLiatIn" runat="server">
<ItemTemplate>
<table>
<tr>
<td> <img src=' <%#Eval("PhotoFileUrl") %>' alt=' <%# Eval("PhotoName") %>' /> </td>
<td> <%#Eval("PhotoName") %> </td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
<HeaderTemplate>
<table>
<td>相册名 </td>
<td>所属会员 </td>
<td>更新日期 </td>
</table>
</HeaderTemplate>
</asp:DataList> 然后在绑定外层完成后,调用BindIn();
private void BindIn()
{
foreach (DataListItem item in this.DataListOut.Items)
{
try
{
//内层绑定
Label lb = (Label)item.FindControl("lable1");
String id = lb.Text.Trim(); DataList dl = (DataList)item.FindControl("DataListIn");
dl.DataSource = CataAccess.GetSomeAlbums(id);
dl.DataBind();
lb.Visible=false;
}
catch (Exception e)
{ }
}
}
protected void DataListOut_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//内层绑定
string albumname = DataListOut.DataKeys[e.Item.ItemIndex].ToString().Trim(); DataList dl = (DataList)e.Item.FindControl("DataListIn");
dl.DataSource = CataAccess.GetSomeAlbums(albumname);
dl.DataBind();
}
}
此时用3楼的方法就可以解决问题了。
3楼的朋友,能解释一下吗?谢谢
{
string albumname = DataListOut.DataKeys[e.Item.ItemIndex].ToString().Trim();//通过主键绑定
DataList dl = null;
dl = (DataList)e.Item.FindControl("DataListIn")
dl.DataSource = CataAccess.GetSomeAlbums(albumname);
dl.DataBind();
}
}
参考
http://www.cnblogs.com/liqiang665/archive/2007/06/06/773605.html
http://www.cnblogs.com/ensure125/articles/382812.html