【ASP.NET Step by Step】之八 Master/Detail Filtering With Two DropDownLists

一个Supplier的Dropdownlist
一个相应Product的Dropdownlist
一个Product Detail表

主要问题是:
如果更改Supplier, Product List变了,但是Product Detail并没有反应相应的产品,还是上一个。
再次更改Supplier,这次正常了,Product Detail变化; 再次更改Supplier,又不正常。。。
反正有点抽风。

要理解这一点,必须了解Rebind, Page's LifeStyle
我们更改了Supplier,引发PostBack(request),
然后所有的ObjectDataSource会检查各自的SelectParameter值是否发生变化有变化的就会把绑定到这个数据源的控件refresh
此时ProductsInCategory ObjectDataSource
<SelectParameters>
            <asp:ControlParameter ControlID="Categories" Name="CategoryID"
                PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
检查到SelectParameter发生变化,所以ProductInCategory DropDownList就会Rebind;

而ProductDetails ObjectDataSource不会在那里傻傻等待,早早就检查完歇着了,当然查的结果是没有变化了。


这就解释了为什么不正常,正常,不正常,正常。。。

要解决这个问题,我们需要在ProductsByCategory DropDownList绑定后显式的重新绑定ProductDetails DetailsView.
在ProductsByCategory DropDownList的DataBound事件中调用ProductDetails DetailsView的DataBind()方法.

protected void ProductsByCategory_DataBound(object sender, EventArgs e)
{     ProductDetails.DataBind();     }

添加ProductDetails GridView的DataBind()方法的显式调用后,就一切正常了。


 

转载于:https://www.cnblogs.com/DylanWind/archive/2008/12/11/1353096.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值