32数据控件的嵌套文档格式.docx
《32数据控件的嵌套文档格式.docx》由会员分享,可在线阅读,更多相关《32数据控件的嵌套文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
图2:
创建一个名为CategoriesDataSource的ObjectDataSource
用CategoriesBLL类的GetCategories方法配置O
图3:
用CategoriesBLL类的GetCategories方法配置ObjectDataSource
我们需要切换到源视图来手动输入声明代码指定Repeater的template内容.增加一个带<
h4>
的name和<
p>
的description的ItemTemplate.用<
hr>
将category分开.在作完这些后,你的页面代码里的Repeater和ObjectDataSource声明语言应该和下面差不多:
ASP.NET
<
asp:
RepeaterID="
CategoryList"
runat="
server"
DataSourceID="
CategoriesDataSource"
EnableViewState="
False"
>
ItemTemplate>
<
%#Eval("
CategoryName"
)%>
/h4>
Description"
/p>
/ItemTemplate>
SeparatorTemplate>
hr/>
/SeparatorTemplate>
/asp:
Repeater>
ObjectDataSourceID="
OldValuesParameterFormatString="
original_{0}"
SelectMethod="
GetCategories"
TypeName="
CategoriesBLL"
ObjectDataSource>
图4表示现在在浏览器里浏览这个页.
图4:
列出每个Category的Name和Description,用水平线隔开
第二步:
增加嵌套的Repeater显示Product
下一步我们的任务是在CategoryList的ItemTemplate里添加一个Repeater用来显示属于各个category下的product.有很多方法可以存取内层的Repeater数据,我们将探讨两种现在我们在CategoryListRepeater的ItemTemplate里创建productRepeater.每个product里将包含name和price我们将下面的标记加到CategoryList的ItemTemplate里:
Repeaterrunat="
ID="
ProductsByCategoryList"
HeaderTemplate>
ul>
/HeaderTemplate>
li>
strong>
ProductName"
/strong>
(<
UnitPrice"
"
{0:
C}"
)<
/li>
FooterTemplate>
/ul>
/FooterTemplate>
第三步:
将各Category下的Product绑定到ProductsByCategoryListRepeater
如果现在你浏览这个页,你会看到象图4一样的页面,因为我们还没有在Repeater里绑定任何数据.有几种方法可以将合适的product记录绑定到Repeater里,其中一些会比较有效.现在主要的任务是为指定category取到合适的product.可以通过在ItemTemplate里语法声明ObjectDataSource或者直接在后台代码编程来将数据绑定到内层的Repeater.
通过ObjectDataSource和ItemDataBound来获取数据
这里我们还是用ObjectDataSource来实现.ProductsBLL类的GetProductsByCategoryID(Category)
方法可以返回特定CategoryID的products信息.因此,我们将在CategoryListRepeater的ItemTemplate里新建一个ObjectDataSource,并用这个方法配置它.不幸的,Repeater不允许通过设计视图来修改template,因此我们需要手动添加将声明语法.见下面的代码:
ProductsByCategoryDataSource"
-
soldas<
QuantityPerUnit"
at
GetProductsByCategoryID"
ProductsBLL"
SelectParameters>
ParameterName="
CategoryID"
Type="
Int32"
/>
/SelectParameters>
当使用ObjectDataSource方法时我们需要设置ProductsByCategoryListRepeater的DataSourceID为ObjectDataSource(ProductsByCategoryDataSource).注意ObjectDataSource有一个<
Parameter>
来指定传给GetProductsByCategoryID(categoryID)的categoryID.但是我们怎么来指定这个值呢?
我们可以设置DefaultValue属性为<
见下面的代码:
ASP.NET
DefaultValue='
)'
不幸的,数据绑定语法只能用在有DataBinding事件的控件里.Parameter类没有这样的事件,因此这样使用会出错.我们需要为CategoryListRepeater的ItemDataBound创建一个事件处理来设置这个值.每个item绑定到Repeater时激发ItemDataBound事件.因此每次外层的Repeater激发这个时间时,我们可以将当前的CaegoryID的值传给ProductsByCategoryDataSourceObjectDataSource的CategoryID参数.下面的代码是为CategoryListRepeater的ItemDataBound创建一个eventhandle