今天做了一个GridView内嵌套DataList的东东。GirdView来显示电影类别,DataList用来显示一个类别中的9部电影(3行3列)。
  先来看一下数据源的大概结构:
GridView内嵌套DataList
  要用到的是Movie和MovieType表。
  创建两个BLL方法,分别用于选出Type表中全部的类别以及某一类别的全部影片:

GridView内嵌套DataListusing System;
GridView内嵌套DataList
using System.Collections.Generic;
GridView内嵌套DataList
using System.Text;
GridView内嵌套DataList
using QmxMovieDAL;
GridView内嵌套DataList
using QmxMovieDAL.QmxMovieTableAdapters;
GridView内嵌套DataList
namespace QmxMovieBLL
}
GridView内嵌套DataListusing System;
GridView内嵌套DataList
using System.Collections.Generic;
GridView内嵌套DataList
using System.Text;
GridView内嵌套DataList
using QmxMovieDAL;
GridView内嵌套DataList
using QmxMovieDAL.QmxMovieTableAdapters;
GridView内嵌套DataList
namespace QmxMovieBLL
}
然后,在显示页面上添加一个GridView、一个ObjectDataSource:
 1GridView内嵌套DataList    <asp:GridView ID="gvTypeList" runat="server" AutoGenerateColumns="False" DataKeyNames="TypeID"
 2GridView内嵌套DataList               DataSourceID="odsMovieTypeList" OnRowDataBound="gvTypeList_RowDataBound" ShowHeader="False" Width="95%">
 3GridView内嵌套DataList            <Columns>
 4GridView内嵌套DataList                <asp:BoundField DataField="TypeName" HeaderText="TypeName" SortExpression="TypeName" >
 5GridView内嵌套DataList                    <ItemStyle HorizontalAlign="Center" VerticalAlign="Top" Width="80px" />
 6GridView内嵌套DataList                    <HeaderStyle VerticalAlign="Top" Width="80px" />
 7GridView内嵌套DataList                </asp:BoundField>
 8GridView内嵌套DataList                <asp:TemplateField>
 9GridView内嵌套DataList                    <ItemTemplate>
10GridView内嵌套DataList            <!--准备添加DataList-->
11GridView内嵌套DataList                    </ItemTemplate>
12GridView内嵌套DataList                </asp:TemplateField>
13GridView内嵌套DataList            </Columns>
14GridView内嵌套DataList        </asp:GridView>
15GridView内嵌套DataList        <asp:ObjectDataSource ID="odsMovieTypeList" runat="server" DeleteMethod="DeleteMovieType"
16GridView内嵌套DataList            InsertMethod="InsertMovieType" OldValuesParameterFormatString="{0}"
17GridView内嵌套DataList            SelectMethod="GetMovieTypesVisiable" TypeName="QmxMovieBLL.MovieTypeBLL" UpdateMethod="UpdateMovieType">
18GridView内嵌套DataList            <DeleteParameters>
19GridView内嵌套DataList                <asp:Parameter Name="typeID" Type="Int32" />
20GridView内嵌套DataList            </DeleteParameters>
21GridView内嵌套DataList        </asp:ObjectDataSource>

第17行,SelectMethod指向MovieTypeBLL中的GetMovieTypesVisiable方法。TypeName设定使用的BLL。
注意一下第10行,添加了一个模板列,这个位置就是空着准备放DataList的。
将下列代码添加到上述第10行位置:
 1GridView内嵌套DataList<asp:DataList ID="dlMovies" runat="server" DataKeyField="MovieID" DataSourceID="odsTop9TypedMovie" RepeatColumns="3" RepeatDirection="Horizontal" Width="100%">
 2GridView内嵌套DataList    <ItemTemplate>
 3>
注意第9行,此ObjectDataSource需要一个参数typeID,此参数恰好为DataList所在行的类别的类别编号(TypeID)。而GridView的OnRowDataBound事件触发于一行数据已经绑定到GridView上以后,此时,已经可以访问到此GridViewRow上的数据,故,在GridView的OnRowDataBound事件处理中添加以下代码:
 1GridView内嵌套DataListprotected void gvTypeList_RowDataBound(object sender, GridViewRowEventArgs e)
 2}
通过,第7行,我们把e.Row.DataItem转成DataRowView对象,取其Row并转成强类型的MovieTypeRow,赋给movieType对象,然后,下一行就用它的TypeID属性,获得其类别编号并赋给DataList所使用的ObjectDataSource的Select参数。最后对DataList进行数据绑定。
  一个内嵌了DataList的GridView就完成了。
  感谢lg的提醒,最后附加一张效果图(还没有美化过:-)GridView内嵌套DataList

相关文章: