
2.5 Master-Detail网页
Triggers的设计除了可以让UpdatePanel控件通过外面的控件来进行刷新外,也可以让我们由另一个UpdatePanel中的控件来触发此UpdatePanel控件的刷新,这常用于Master-Details式的数据网页上,请照着下列步骤做。
1. 创建一个新网页。
2. 放入一个ScriptManager控件。
3. 放入两个UpdatePanel控件,命名为UpdatePanel1、UpdatePanel2,将UpdateMode属性都设为Conditional。
4. 在UpdatePanel1中放入一个SqlDataSource控件,命名为SqlDataSource1,配置其链接至Northwind数据库的Orders数据表。
5. 放入一个GridView控件至UpdatePanel1,将DataSourceID设为SqlDataSource1,勾选“Enable Paging”选项。
6. 放一个SqlDataSource控件至UpdatePanel2中,命名为SqlDataSource2,配置其链接至Order Details数据表,点击WHERE按钮加入如图2-20所示的条件。

图2-20
由于SqlDataSource控件的向导无法在值来源为Control时,直接以下拉菜单的方式找到位于另一个UpdatePanel中的子控件,因此,此处先以值来源为None方式添加参数,完成后再点击此SqlDataSource控件的SelectQuery属性来修改,如图2-21所示。

图2-21
在这个参数编辑窗中,只要点击右下方的“Show advanced properties”链接,便可在ControlID中键入所要的控件ID。此处键入GridView1,也就是位于第一个UpdatePanel控件中的GridView控件,然后将PropertyName属性设定为来自于GridView控件的SelectedValue属性,接着将Type设为Int32。
7. 于UpdatePanel2中放入另一个GridView控件,命名为GridView2,将其DataSourceID设为SqlDataSource2。
8. 点击UpdatePanel2的Triggers属性,新增两个Trigger,第一个将ControlID属性设为GridView1,EventName设为SelectedIndexChanged,第二个将ControlID属性设为GridView1,EventName设为PageIndexChanged。注意!Triggers编辑窗有时会无法由ControlID属性所提供的下拉菜单来选取GridView1,这时只要手动键入控件ID及需刷新的事件名称即可(如图2-22所示)。

图2-22
完成后将此网页设为起始网页后运行程序,点击某行后便可看到其订单明细,如图2-23 所示。
这与将两个GridView控件及两个SqlDataSource控件放在同一个UpdatePanel中有何不同呢?不同之处在于,当Details(GridView2)允许被选取或编辑时,若放在同一个UpdatePanel中,只要Details被选取或编辑,连带着Master(GridView1)也会刷新,而使用本例所介绍的Trigger时,当Details被选取或编辑时,并不会引发Master的刷新!

图2-23