A)以下问题基于这样的假设:控件总是按照声明的顺序绑定到数据源控件?因此在我们的示例中,SqlDataSource1将连接到SqlDataSource2之前的数据源,因此 lstCities 将在 GridView1 之前填充值,并且原因是 lstcities 是在 GridView1 之前声明的?!
B)如果是这样,那么 ControlParameter 究竟何时从 DropDownList 中检索一个值?我假设它是在 SqlDataSource1_Selected()事件处理程序之后和 SqlDataSource2_Selecting()事件处理程序之前,但是恰好是什么时候?
在.aspx页面:
<asp:SqlDataSource ID="SqlDataSource1" ... >
</asp:SqlDataSource>
<asp:DropDownList ID="lstCities" DataSourceID="SqlDataSource1"
DataTextField="City" runat="server"></asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" ... >
<SelectParameters>
<asp:ControlParameter ControlID="lstCities" Name="City"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView DataSourceID="SqlDataSource2" runat="server" …>
</asp:GridView>
感谢名单
编辑:
如果它是回发,那么这些参数将从页面的OnLoadComplete上的视图状态再次按照声明的顺序加载。
Q1 - 让我们假设ControlParameter绑定到控件C的属性C1。我想在回发时,ControlProperty始终能够从ViewState获取C.C1的值,无论C是什么类型,即使是C ViewState已禁用?!
Q2 - 但请问为什么,如果第一次创建页面,还不能从viewstate中检索ControlParameter的值?毕竟,当lstCities从数据源检索数据时,lstCities.SelectedValue的值是否已设置?
thanx mate
第二次编辑:
我很抱歉没有及早回复,但我没有意识到你已经回复了。当我这样做的时候,我花了20分钟试图让我的3个braincells正常工作,但我不确定我是否成功了
A)所以ControlParameter会评估C.C1,从而在C绑定后检索C.C1的值?!
Q1 - ControlParameter仅读取自己的状态,并仅确定它是否已更改
A)因此,ControlParameter在绑定发生之前检查其ViewState是否发生了更改(以便触发OnParameterChanged事件) - &gt;因此它在Page.OnLoadComplete期间检查其ViewState。 但是ControlParameter如何知道它的ViewState已经改变了(它会在第一次回发时知道)?毕竟,从第一次创建页面开始,ControlParameter的ViewState将始终被标记为脏,那么从一个回发到另一个回调,ControlParameter将如何知道它的值是否在回发之间发生了变化?
B)我假设ControlParameter检查它的Viewstate是否只是更改,以便它可以触发OnParameterChanged事件。但为什么处理这个事件如此重要?
首次进行财产评估是在Page.OnLoadComplete
上
通过属性评估,您的意思是ControlParameter检查自己的ViewState?因此,您并不意味着ControlParameter评估C.C1(我假设在C绑定后发生)
我真的很感谢你的帮助
第三次编辑:
我真的很抱歉再花时间。我会尽力把它作为我最后一次编辑。
在OnLoadComplete和数据绑定发生时都会调用Update()。在Update()中,还执行以下句子:
this.ViewState["ParameterValue"] = actualValue;
因此,如果在发生数据绑定时调用Update(),那意味着什么 在OnLoadComplete中调用下一个回发UpDate()时,C.C1和ControlParameter将具有相同的值,因此
if ((actualValue == null && storedValue != null)
|| (actualValue != null && actualValue != storedValue))
将始终返回false(在OnLoadComplete中调用Update()时),因此OnParameterChanged事件永远不会被触发?1如果是这样,我看不到需要在OnLoadComplete中调用Update()!
非常有责任
答案 0 :(得分:2)