【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()方法的显式调用后,就一切正常了。
出处:http://www.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。