参考页面官方demo:
http://demos.devexpress.com/ASPxGridViewDemos/MasterDetail/MasterDetail.aspx
Master-Detail能够使主表与子表的信息在同一页面展示,无须新建子表页面。
一直用一个grid,点击每行的详细按钮或链接,转到子表页面。今天尝试使用ASPxGridView中的Master-Detail完成了一个列表页面,下面是我的制作步骤及其经验总结:
1、在aspx页面上拖放2个控件。aspxgridview和ObjectDataSource,分别命名为grid和objSaleUser
2、为 ObjectDataSource添加数据源。
3、设置 grid的数据源为objSaleUser,设置KeyFieldName和AutoGenerateColumns="False",添加你想显示的列。
设置SettingsDetail下的 ShowDetailRow="True"
4、 为grid编辑模板,选择DetailRow,光标定位于DetailRow,拖放一个aspxgridview进去,命名为detailGrid。
5、为detailGrid拖放一个ObjectDataSource到页面中,重命名为ObjSaleUserWeeklyReports
配置数据源和定义参数,因GetFinishedWeeklyReports中有一个实参saleUserID,所以在定义参数中为其设置一个 session。
6、设置detailGrid的数据源为ObjSaleUserWeeklyReports,设置KeyFieldName和 AutoGenerateColumns="False",添加你想显示的列。设置SettingsDetail下的IsDetailGrid="true"
7、给detailGrid添加事件BeforePerformDataSelect,查看帮助文档知Occurs before the ASPxGridView control obtains data from a data source. When implementing a master-detail mode, the BeforePerformDataSelect event should be handled to specify session values.在后台文件cs中为Session["saleUserID"]赋值。Session["saleUserID"] = (sender as ASPxGridView).GetMasterRowKeyValue();
8、前后台代码如下:
Inherits = " Report_SaleUserListReport " %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<% @ Register Assembly = " DevExpress.Web.v8.1, Version=8.1.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1 "
Namespace = " DevExpress.Web.ASPxPager " TagPrefix = " dxpg " %>
<% @ Register Assembly = " AjaxControlToolkit " Namespace = " AjaxControlToolkit " TagPrefix = " cc1 " %>
<% @ Register Assembly = " System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 "
Namespace = " System.Web.UI " TagPrefix = " asp " %>
<% @ Register Assembly = " DevExpress.Web.v8.1, Version=8.1.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1 "
Namespace = " DevExpress.Web.ASPxTabControl " TagPrefix = " dxtc " %>
<% @ Register Assembly = " DevExpress.Web.v8.1, Version=8.1.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1 "
Namespace = " DevExpress.Web.ASPxClasses " TagPrefix = " dxw " %>
<% @ Register Assembly = " DevExpress.Web.ASPxGridView.v8.1, Version=8.1.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1 "
Namespace = " DevExpress.Web.ASPxGridView " TagPrefix = " dxwgv " %>
<% @ Register Assembly = " DevExpress.Web.ASPxEditors.v8.1, Version=8.1.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1 "
Namespace = " DevExpress.Web.ASPxEditors " TagPrefix = " dxe " %>
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< dxtc:ASPxPageControl ID ="ASPxPageControl1" runat ="server" ActiveTabIndex ="0" AutoPostBack ="True"
Width ="99%" Height ="590px" >
< ActiveTabStyle BackColor ="Transparent" >
</ ActiveTabStyle >
< ContentStyle BackColor ="Transparent" >
< Border BorderColor ="#002D96" BorderStyle ="Solid" BorderWidth ="1px" ></ Border >
</ ContentStyle >
< Paddings Padding ="0px" ></ Paddings >
< LoadingPanelStyle ImageSpacing ="6px" BackColor ="Transparent" >
</ LoadingPanelStyle >
< TabPages >
< dxtc:TabPage Text ="销售人员周报" >
< ContentCollection >
< dxw:contentcontrol runat ="server" >
< table >
< tr >
< td style ="width: 256px" >
< dxwgv:ASPxGridView ID ="grid" runat ="server" AutoGenerateColumns ="False" DataSourceID ="objSaleUser"
KeyFieldName ="U_ID" ClientInstanceName ="grid" Width ="800px" >
< SettingsText EmptyDataRow ="没有数据" ></ SettingsText >
< SettingsLoadingPanel Text ="正在加载..." ></ SettingsLoadingPanel >
< Styles >
<Header ImageSpacing="5px" SortingImageSpacing="5px" HorizontalAlign="Center">
</Header>
<LoadingPanel ImageSpacing="10px">
</LoadingPanel>
<AlternatingRow Enabled="True" />
</ Styles >
< Columns >
< dxwgv:GridViewDataTextColumn FieldName ="PI_NAME" VisibleIndex ="0" Caption ="姓名" >
< CellStyle HorizontalAlign ="Center" >
</ CellStyle >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="PI_CODE" VisibleIndex ="1" Caption ="编码" >
< CellStyle HorizontalAlign ="Center" >
</ CellStyle >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="PI_TELNUM" VisibleIndex ="2" Caption ="公司电话" >
< CellStyle HorizontalAlign ="Center" >
</ CellStyle >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="PI_EMAIL" VisibleIndex ="3" Caption ="公司邮箱"
Width ="150px" >
< CellStyle HorizontalAlign ="Center" >
</ CellStyle >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="PI_MOBILEPHONE" VisibleIndex ="4" Caption ="个人电话" >
< CellStyle HorizontalAlign ="Center" >
</ CellStyle >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="PI_GTALK" VisibleIndex ="5" Caption ="GTalk"
Width ="150px" >
< CellStyle HorizontalAlign ="Center" >
</ CellStyle >
</ dxwgv:GridViewDataTextColumn >
</ Columns >
< SettingsDetail AllowOnlyOneMasterRowExpanded ="True" ShowDetailRow ="True" />
< Templates >
< DetailRow >
销售经理: < b >
<% # Eval ( " U_NAME " ) %>
</ b > , 最近一个月的周报
< br />
< br />
< dxwgv:ASPxGridView ID ="detailGrid" runat ="server" Width ="750px" AutoGenerateColumns ="False"
ClientInstanceName ="detailGrid" KeyFieldName ="SWI_ID" DataSourceID ="ObjSaleUserWeeklyReports"
OnBeforePerformDataSelect ="detailGrid_DataSelect" >
< SettingsText EmptyDataRow ="没有数据" ></ SettingsText >
< SettingsLoadingPanel Text ="正在加载..." ></ SettingsLoadingPanel >
< Styles >
<Header ImageSpacing="5px" SortingImageSpacing="5px" HorizontalAlign="Center">
</Header>
<LoadingPanel ImageSpacing="10px">
</LoadingPanel>
<AlternatingRow Enabled="True" />
</ Styles >
< SettingsBehavior AllowFocusedRow ="True" AllowGroup ="False" AllowSort ="False" />
< Columns >
< dxwgv:GridViewDataTextColumn FieldName ="SWI_ITEM1" Width ="150px" Caption ="星期(日期)"
VisibleIndex ="0" >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="SWI_ITEM2" Width ="450px" Caption ="当天主要工作内容和拜访用户情况" VisibleIndex ="1" >
</ dxwgv:GridViewDataTextColumn >
< dxwgv:GridViewDataTextColumn FieldName ="SWI_ITEM3" Width ="150px" Caption ="已取得的阶段性成果" VisibleIndex ="2" >
</ dxwgv:GridViewDataTextColumn >
</ Columns >
< SettingsDetail IsDetailGrid ="true" />
< SettingsBehavior ColumnResizeMode ="Control" AllowFocusedRow ="True" AllowGroup ="False"
AllowSort ="False" />
< SettingsPager AlwaysShowPager ="True" PageSize ="10" >
< AllButton Visible ="True" >
</ AllButton >
< Summary AllPagesText ="分页{0} - {1} (总{2}条)" Text="当前第{0}页,一共{1}页 (总{2}条)" />
</SettingsPager>
</dxwgv:ASPxGridView>
</DetailRow>
</Templates>
<SettingsBehavior ColumnResizeMode="Control" AllowFocusedRow="True" AllowGroup="False"
AllowSort="False" />
<SettingsPager AlwaysShowPager="True" PageSize="15">
<AllButton Visible="True">
</AllButton>
<Summary AllPagesText="分页{0} - {1} (总{2}条)" Text="当前第{0}页,一共{1}页 (总{2}条)" />
</SettingsPager>
</dxwgv:ASPxGridView>
</td>
</tr>
</table>
</dxw:contentcontrol>
</ContentCollection>
</dxtc:TabPage>
</TabPages>
</dxtc:ASPxPageControl>
<asp:ObjectDataSource ID="objSaleUser" runat="server" SelectMethod="GetSaleUserList"
TypeName="DHC.EAS.Bo.BoWeekReportSummarize"></asp:ObjectDataSource>
<asp:ObjectDataSource ID="ObjSaleUserWeeklyReports" runat="server" SelectMethod="GetFinishedWeeklyReports"
TypeName="DHC.EAS.Bo.BoWeekReportSummarize">
<SelectParameters>
<asp:SessionParameter Name="saleUserID" SessionField="saleUserID" Type="Object" />
</SelectParameters>
</asp:ObjectDataSource>
</form>
</body>
</html>


using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DevExpress.Web.ASPxGridView;
public partial class Report_SaleUserListReport : PageBase
{
protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
grid.DataBind();
// grid.DetailRows.ExpandRow(0);
}
}
protected void detailGrid_DataSelect( object sender, EventArgs e)
{
Session[ " saleUserID " ] = (sender as ASPxGridView).GetMasterRowKeyValue();
}
}