作一个下拉式菜单,用Repeater1作为主菜单,Repeater2作为子菜单。
在Repeater1里面嵌Repeater2,而这个数据源所需的参数是必须由外层Repeater1绑定值以后才能提供的,
这就出现了问题,当外层执行完时我没有办法在Repater2绑定之前获取外层的值.结果Repater2立刻执行了一次徒劳的、无任何参数的绑定.然后才用OnItemDataBound事件对内层Repeater2执行了第二次正确的绑定.如以下代码:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
((ObjectDataSource)e.Item.FindControl("odsSubMenu")).SelectParameters["pID"].DefaultValue = ((HiddenField)e.Item.FindControl("hdnMenuID")).Value;
((Repeater)e.Item.FindControl("Repeater2")).DataBind();
}
}
我试过用OnItemCreated事件,但是那样用FindControl得不到任何子控件。
在Repeater1里面嵌Repeater2,而这个数据源所需的参数是必须由外层Repeater1绑定值以后才能提供的,
这就出现了问题,当外层执行完时我没有办法在Repater2绑定之前获取外层的值.结果Repater2立刻执行了一次徒劳的、无任何参数的绑定.然后才用OnItemDataBound事件对内层Repeater2执行了第二次正确的绑定.如以下代码:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
((ObjectDataSource)e.Item.FindControl("odsSubMenu")).SelectParameters["pID"].DefaultValue = ((HiddenField)e.Item.FindControl("hdnMenuID")).Value;
((Repeater)e.Item.FindControl("Repeater2")).DataBind();
}
}
我试过用OnItemCreated事件,但是那样用FindControl得不到任何子控件。
解决方案 »
- 静态网站怎么实现数据更新
- EF如何修改数据
- 文本框设置100%和div设置100%为什么不一样的宽度
- vs2008 连接sql2000数据库
- 一个菜鸟级问题
- "%D0%A1%CD%B5%B3%CC%D0%F2" 这是什么编码方式,如何实现?
- 一个简单的问题。大家帮忙(分不多)
- 在线等!急!解决马上给分!如何控制面版布局?
- 打开数据库的问题
- Web Services中使用switch case 语句,编译时break出现"检测到无法访问的代码"错误???
- datagrid的checkbox点击后。。取得的值都是false
- 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。分少了 没人来 。。。。。。。。。。。。。。。。。。。。。。。。。。。
LZ的思路也是正确的,但我们可能在其中加一个判断再进行内层Repeater2的数据绑定
像可以判断当没有参数时,我们就不执数第二个Repeater1控件的数据绑定
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item ¦ ¦ e.Item.ItemType == ListItemType.AlternatingItem)
{
if(!其控件的参数值为初始值或是默认认值是)
{
((ObjectDataSource)e.Item.FindControl( "odsSubMenu ")).SelectParameters[ "pID "].DefaultValue = ((HiddenField)e.Item.FindControl( "hdnMenuID ")).Value;
((Repeater)e.Item.FindControl( "Repeater2 ")).DataBind(); }
else
{ 则不进行任何操作 }
}