【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不会在那里傻傻等待,早早就检查完歇着了,当然查的结果是没有变化了。

【ASP.NET Step by Step】之八 Master/Detail Filtering With Two DropDownLists_第1张图片
这就解释了为什么不正常,正常,不正常,正常。。。

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

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

添加ProductDetails GridView的DataBind()方法的显式调用后,就一切正常了。
【ASP.NET Step by Step】之八 Master/Detail Filtering With Two DropDownLists_第2张图片


 

你可能感兴趣的:(asp.net)