MasterDetailCRUDSample.aspx
aspx页面为Master和Detail实体分别定一个DataSource、GridView和DetailsView。<%@ Page Language="C#" AutoEventWireup="true" CodeFile="StrongTypeQuerySample.aspx.cs" Inherits="StrongTypeQuerySample" %> <%@ Register TagPrefix="nb" Namespace="NBear.Web.Data" Assembly="NBear.Web.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>NBear DataSource Test - Strong Type Query Sample</title> </head> <body> <form id="form1" runat="server"> Name to Query: <asp:TextBox ID="txtName" runat="server"></asp:TextBox> (* as wild char) Order By: <asp:DropDownList ID="listOrderByProperty" runat="server"> <asp:ListItem Selected="True" Text="SimpleId" Value="SimpleId"></asp:ListItem> <asp:ListItem Text="SimpleName" Value="SimpleName"></asp:ListItem> </asp:DropDownList> <asp:DropDownList ID="listOrderByDesc" runat="server"> <asp:ListItem Selected="True" Text="ASC" Value="ASC"></asp:ListItem> <asp:ListItem Text="DESC" Value="DESC"></asp:ListItem> </asp:DropDownList> <asp:Button ID="btnFind" runat="server" Text="Find" OnClick="btnFind_Click" /><br /> <br /> <nb:NBearDataSource ID="TestDS" runat="server" ConnectionStringName="test access db" TypeName="Entities.SimpleData" /> <asp:GridView ID="TestGrid" runat="server" DataSourceID="TestDS" AllowSorting="true" /> </form> <hr /> <a href="Default.aspx">Back to Default</a><br /> <a href="PagableRepeaterSample.aspx">Pagable Repeater Sample</a><br /> <a href="MasterDetailCRUDSample.aspx">Master Detail CRUD Sample</a> </body> </html>
MasterDetailCRUDSample.aspx.cs
code-behind代码也很简单,一方面在Master的GridView事件中,改变关联的Detail的DataSource的查询条件,显示Master关联的Details;另一方面,在Detail的DataSource的Saving事件中,将Detail的MasterID属性值设为当前选中的Master的ID。这样就很容易的实现了Master和Detail的关联查询、更新和删除。using System; 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; public partial class MasterDetailCRUDSample : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { dsDetails.Saving += new EventHandler<NBear.Web.Data.NBearDataSourceEventArgs>(dsDetails_Saving); } void dsDetails_Saving(object sender, NBear.Web.Data.NBearDataSourceEventArgs e) { Entities.Detail detail = (Entities.Detail)e.Entity; if (!detail.IsAttached()) //entity.IsAttached() before inserted is false, after inserted or when updating is true. { detail.MasterID = int.Parse(gdMaster.SelectedRow.Cells[1].Text); } } protected void gdMaster_SelectedIndexChanged(object sender, EventArgs e) { if (gdMaster.SelectedRow != null) { gdDetail.Visible = true; dtDetail.Visible = true; dsDetails.Filter(Entities.Detail._.MasterID == int.Parse(gdMaster.SelectedRow.Cells[1].Text)); } else { gdDetail.Visible = false; dtDetail.Visible = false; } } }