logo 广告
Loading...
 导航 所在位置:论坛首页 -> ┈┋电脑网络┋┈ -> Asp/Asp.Net教程 -> 实现NBear中的DataSource控件
回复
标题:实现NBear中的DataSource控件收藏 编辑 删除 楼主 | 上一篇 下一篇
年少轻狂
头像
等级:职业侠客
权限:普通用户
积分:58
金钱:3692
声望:88
经验:88
发帖数:885
注册:2007年10月26日
资料 短消息2008-8-13 11:43:24
表示一个实体的属性名称,NBear会在运行时将属性对应到相应的数据库字段,其他语法和sql一致。 

    4、Filter(WhereClip where)和OrderBy(OrderByClip orderBy)方法 - 可以运行时调用的方法,参数是nbear的强类型查询/排序表达式,调用这两个方法后,强类型表达式的值会覆盖FilterExpression和DefaultOrderByExpression属性的值。 

    5、Saving/Saved事件 - 这两个事件会在Insert或Update的前后被调用,并允许用户操作Save过程中的实体。 

    关于GridView和Repeater(DataList)如何使用NBearDataSource提供的分页支持 

    1、对于GridView,只需设定其PageSize、PageIndex属性即可。 

    2、对于Repeater(DataList)控件,只需要设置其Repeater.SelectArguments.StartRowIndex和MaximumRows属性,指定当前绑定第几页,每页页数等参数即可。不过注意Repeater的SelectArguments属性是一个protected属性,所以,可能需要继承一个自定义的Repeater,并暴露可以修改Repeater.SelectArguments的接口。 

    例如,如果希望绑定第5页,每页10条记录,只需要设置StartRowIndex=(5-1)*10=40, MaximumRows=10 (也就是每页记录数)。 

    内部实现 

    当指定分页信息时NBearDataSource会在内部使用Gateway.GetPageSelector().FindPage()进行数据库级别的分页查询; 

    如果没有指定分页信息,则NBearDataSource内部会通过Gateway.FindArray()方法进行查询,并返回所有记录。 

    NBearV3.6.3新增PagableRepeater控件,也就是扩展了PageSize和PageIndex属性的Repeater控件,可以直接使用该控件结合任意的支持分页的DataSource绑定某一页数据。下面是一个使用使用了这个扩展的PagableRepeater控件的示例: 

   PagableRepeaterSample.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagableRepeaterSample.aspx.cs" Inherits="PagableRepeaterSample" %>
<%@ Register TagPrefix="nb" Namespace="NBear.Web.Data" Assembly="NBear.Web.Data" %>



NBear DataSource Test - Pagable Repeater Sample



TypeName="Entities.SimpleData" DefaultOrderByExpression="{SimpleId} DESC" />

SimpleId=<%# Eval("SimpleId") %>, SimpleName=<%# Eval("SimpleName") %>



Back to Default
Strong Type Query Sample

 
    Line14-16使用了PagableRepeater控件,可以看到只需要指定PageSize和PageIndex属性就行,使用非常简单。虽然这里PagableRepeater控件使用了NBearDataSource作为数据源,但实际上,也可以使用别的DataSource,只需要DataSource支持基于SelectArguments的自定义分页,比如SqlDataSource
基于NBearDataSource的Master/Detail实体CRUD示例 

    MasterDetailCRUDSample.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="StrongTypeQuerySample.aspx.cs" Inherits="StrongTypeQuerySample" %>
<%@ Register TagPrefix="nb" Namespace="NBear.Web.Data" Assembly="NBear.Web.Data" %>



NBear DataSource Test - Strong Type Query Sample



Name to Query:  (* as wild char)   
Order By: 







 

TypeName="Entities.SimpleData" />



Back to Default
Pagable Repeater Sample
Master Detail CRUD Sample

 
    aspx页面为Master和Detail实体分别定一个DataSource、GridView和DetailsView。 

    MasterDetailCRUDSample.aspx.cs 
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(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;
}
}

    code-behind代码也很简单,一方面在Master的GridView事件中,改变关联的Detail的DataSource的查询条件,显示Master关联的Details;另一方面,在Detail的DataSource的Saving事件中,将Detail的MasterID属性值设为当前选中的Master的ID。这样就很容易的实现了Master和Detail的关联查询、更新和删除

签名

2008-8-13 11:43:24 顶部
第1页 共页 共0个回复     <<    >>    
 快速回复
  • 支持UBB,HTML标签

  • 高级回复

  • 操作选项:评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
      首页 | 购买指南 | 虚拟主机 | 特色介绍 | 下载中心 | 支付方式
    Copyright 2004-2008 BBSGood.com Powered By: BBSGood.Speed Version 5.0
      咨询电话:0575-85513832、0575-85513825(传真)、7*24小时咨询服务:13606552007 不良信息举报中心 浙ICP备05029817号
      业务QQ:38958768、客服QQ1:415896239、客服QQ2:343896043、MSN:jccsxx@hotmail.com