惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - xujh

C# 同步两个子目录文件 ASP.NET中突破上传4M文件的限制 【转】一种在SQLServer中实现Sequence的高效方法 【转】浅谈:国内软件公司为何无法做大做强? - xujh - 博客园 一个正则表达式测试(只可输入中文、字母和数字) - xujh - 博客园 IE6、7下如何设置页面内部件高度和窗口等高(heihgt:100%) HP大中华区总裁孙振耀退休感言 C#的一个双缓冲显示的例子 【ASP.NET】防止ASP.NET按钮多次提交的办法 【ASP.NET】FCKeditor 2.6 + Asp.Net 设置 【ASP.NET】FreeTextBox的使用方法 在VS2005下配置手机设备仿真器访问局域网 [Delphi] 截屏存盘 C# 画圆角矩形 有意思的加菲猫语录 [Delphi]用Delphi7访问.NET 2.0的WebService 转贴[ASP.NET]基于Forms认证的WebService应用 ASP.NET优秀博客搜集 [转贴]DataGrid中的高级ToolTip
DevExpress的ASPxGridView中实现Master-Detail数据动态绑定
xujh · 2010-05-07 · via 博客园 - xujh

Posted on 2010-05-07 18:07  xujh  阅读(2648)  评论()    收藏  举报

      ASPxGridView功能强大,在Demo大部分演示Master-Detail开发都是用直接关联SqlDataSource,用Sql语句直接从表里查询出数据来。但考虑到大型系统中经常要把业务逻辑独立处理形成一个业务逻辑层,大部分数据都是调用业务逻辑层中的接口函数取得的。所以Demo中的示例并不适用。

      好在.Net中还提供ObjectDataSource,可以代替SqlDataSource里提供数据。而ObjectDataSource可以和业务逻辑层相连。

     具体操作如下:

 Default.aspx

 1 <%@ Page Language="C#" AutoEventWireup="True" CodeBehind="Default.aspx.cs" Inherits="webtst._Default" %>
 2 
 3 <%@ Register Assembly="DevExpress.Web.v9.3, Version=9.3.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
 4     Namespace="DevExpress.Web.ASPxPopupControl" TagPrefix="dx" %>
 5 
 6 <%@ Register Assembly="DevExpress.Web.ASPxGridView.v9.3, Version=9.3.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
 7     Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %>
 8 
 9 <%@ Register Assembly="DevExpress.Web.ASPxEditors.v9.3, Version=9.3.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
10     Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %>
11 
12 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
13 
14 <html xmlns="http://www.w3.org/1999/xhtml" >
15 <head runat="server">
16     <title></title>
17 </head>
18 <body>
19 
20     <form id="form1" runat="server">
21     <div>
22 
23         <dx:ASPxGridView ID="masterGridView" runat="server">
24         <Templates>
25         <DetailRow>
26         <%--detail表格要指定它的DataSourceID为对应的ObjectDataSource --%>
27         <dx:ASPxGridView ID="detailGridView" runat="server" AutoGenerateColumns="False" 
28                 DataSourceID="CarDataSource" 
29                 onbeforeperformdataselect="detailGridView_BeforePerformDataSelect">
30             <Columns>
31                 <dx:GridViewDataTextColumn FieldName="Id" VisibleIndex="0">
32                 </dx:GridViewDataTextColumn>
33                 <dx:GridViewDataTextColumn FieldName="CarName" VisibleIndex="1">
34                 </dx:GridViewDataTextColumn>
35             </Columns>
36             <%-- detail表格的这个属性要设置为true --%>
37             <SettingsDetail IsDetailGrid= "true" />
38         </dx:ASPxGridView>
39         </DetailRow>
40         </Templates>
41         <%-- master表格的这个属性要设置为true才能显示出detail表 --%>
42         <SettingsDetail ShowDetailRow="true" />
43         </dx:ASPxGridView>
44     </div>
45     <%-- ObjectDataSource的配置属性,指定了SELECT方法为GetMyCar函数, --%>
46     <asp:ObjectDataSource ID="CarDataSource" runat="server" 
47         SelectMethod="GetMyCar" TypeName="webtst.Car">
48         <SelectParameters>
49             <%-- 设置了一个Session["ID"]来源地参数id --%>
50             <asp:SessionParameter Name="id" SessionField="ID" Type="Int32" />
51         </SelectParameters>
52     </asp:ObjectDataSource>
53     </form>
54 </body>
55 </html>
56 

 Default.aspx.cs

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Web;
  5 using System.Web.UI;
  6 using System.Web.UI.WebControls;
  7 using DevExpress.Web.ASPxGridView;
  8 namespace webtst
  9 {
 10     public partial class _Default : System.Web.UI.Page
 11     {
 12         protected void Page_Load(object sender, EventArgs e)
 13         {
 14 
 15             masterGridView.DataSource = GetDriver();
 16             masterGridView.KeyFieldName = "Id";
 17             masterGridView.DataBind();
 18         }
 19         //后台查询接口,返回主表数据
 20         public List<Driver> GetDriver()
 21         {
 22             List<Driver> drivers = new List<Driver>();
 23             drivers.Add(new Driver(0"Li""Beijing"));
 24             drivers.Add(new Driver(1"Wang""Beijing"));
 25             drivers.Add(new Driver(2"Zhang""Beijing"));
 26             drivers.Add(new Driver(3"Zhao""Beijing"));
 27             drivers.Add(new Driver(4"Qian""Beijing"));
 28             return drivers;
 29         }
 30 
 31         protected void detailGridView_BeforePerformDataSelect(object sender, EventArgs e)
 32         {
 33             //降主表的主键写入Session,以便于ObjectDataSource在SELECT时调用
 34             Session["ID"= (sender as ASPxGridView).GetMasterRowKeyValue();
 35          }
 36         
 37     }
 38     //Master类
 39     public class Driver
 40     {
 41         private int _Id;
 42         public int Id
 43         {
 44             get { return _Id; }
 45             set { _Id = value; }
 46         }
 47         private string _Name;
 48         public string Name
 49         {
 50             get { return _Name; }
 51             set { _Name = value; }
 52         }
 53         private string _Addr;
 54         public string Addr
 55         {
 56             get { return _Addr; }
 57             set { _Addr = value; }
 58         }
 59         public Driver(int id, string name, string addr)
 60         {
 61             Id = id;
 62             Name = name;
 63             Addr = addr;
 64         }
 65         
 66     }
 67     //Detail类
 68     public class Car
 69     {
 70         private int _Id;
 71         public int Id
 72         {
 73             get { return _Id; }
 74             set { _Id = value; }
 75         }
 76         private string _CarName;
 77         public string CarName
 78         {
 79             get { return _CarName; }
 80             set { _CarName = value; }
 81         }
 82         public Car(int id, string carname)
 83         {
 84             Id = id;
 85             CarName = carname;
 86         }
 87         //静态查询函数,对应ObjectDataSource中的SelectMethod,参数对应从主表中传入的Key
 88         //在ObjectDataSource根据这个参数自动产生,然后只要指定参数来源于Session中的ID即可
 89         public static List<Car> GetMyCar(int id)
 90         {
 91             //随机产生一个子表的返回数据,此处可以替换成调用其他BLL接口
 92             List<Car> cars = new List<Car>();
 93 
 94             cars.Add(new Car(id, "Car" + (id * 10 + 1).ToString()));
 95             cars.Add(new Car(id, "Car" + (id * 10 + 2).ToString()));
 96             cars.Add(new Car(id, "Car" + (id * 10 + 3).ToString()));
 97             cars.Add(new Car(id, "Car" + (id * 10 + 4).ToString()));
 98             return cars;
 99         }
100         
101     }
102 }
103