<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="ProjectList.aspx.cs" Inherits="PTWeb.ProjectList" Title="项目列表" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<div>
<strong>项目<br />
</strong>
<%-- AllowPaging="True" 允许分页
PageSize="4" 每页4行
DataKeyNames="Id" 强调这个设置是非常重要的,因为后台要通过获取这个Key值来唯一的定位这条记录,从而选择和删除操作
(549)
--%>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" AllowSorting="true"
DataSourceID="ProjectListDataSource" PageSize="4" DataKeyNames="Id" OnRowDeleted="GridView1_RowDeleted">
<Columns>
<%-- Visible="False" 这一列被隐藏 --%>
<asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" Visible="False" />
<%-- 超链接域
DataNavigateUrlFields="Id" DataNavigateUrlFormatString="ProjectEdit.aspx?id={0}
数据导航域ID 数据导航URL
组合
当数据源中包含多个必须组合用于创建 HyperLinkField 对象的超链接的字段时,请使用 DataNavigateUrlFields 属性。DataNavigateUrlFields
属性中指定的字段与 DataNavigateUrlFormatString 属性中的格式字符串组合,以构造 HyperLinkField 对象中的超链接。
--%>
<asp:HyperLinkField DataNavigateUrlFields="Id" DataNavigateUrlFormatString="ProjectEdit.aspx?id={0}"
DataTextField="Name" HeaderText="项目" />
<%-- ShowDeleteButton="True" SelectText="Edit"
显示删除按钮 选择文本进入编辑模式
--%>
<asp:CommandField ShowDeleteButton="True" SelectText="Edit" />
</Columns>
</asp:GridView>
<asp:LinkButton ID="NewProjectButton" runat="server" OnClick="NewProjectButton_Click">添加项目</asp:LinkButton>
<br />
<br />
<asp:Label ID="ErrorLabel" runat="server" ForeColor="Red"></asp:Label>
<csla:CslaDataSource ID="ProjectListDataSource" runat="server" TypeName="ProjectTracker.Library.ProjectList, ProjectTracker.Library"
OnDeleteObject="ProjectListDataSource_DeleteObject" OnSelectObject="ProjectListDataSource_SelectObject"
TypeSupportsPaging="False" TypeSupportsSorting="False">
</csla:CslaDataSource>
<br />
</div>
</asp:Content>
//======================================================================
//
// Guid1: d08d215e-c7a9-4079-95d1-54704d568a8a
// CLR版本: 2.0.50727.3053
// 新建项输入的名称: ProjectList
// 机器名称: SOFTWARE-FRT-08
// 命名空间名称: PTWeb
// 文件名: ProjectList
// 当前系统时间: 2008-10-2 19:08:08
// 用户所在的域: TECHSTAR
// 当前登录用户名: frt
// 创建年份: 2008
//
// Created by Terry.Feng.C (冯瑞涛) at 2008-10-2 19:08:08
//
//
//======================================================================
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;
using ProjectTracker.Library;
namespace PTWeb
{
/// <summary>
/// 这个类和RoleList页面几乎一样,可以参考前面的描述
/// </summary>
public partial class ProjectList : System.Web.UI.Page
{
#region 私有成员
private void ApplyAuthorizationRules()
{
this.GridView1.Columns[this.GridView1.Columns.Count - 1].Visible = Project.CanDeleteObject();
NewProjectButton.Visible = ProjectTracker.Library.Project.CanAddObject();
}
private ProjectTracker.Library.ProjectList GetProjectList()
{
object businessObject = Session["currentObject"];
if (businessObject == null || !(businessObject is ProjectTracker.Library.ProjectList))
{
businessObject = ProjectTracker.Library.ProjectList.GetProjectList();
Session["currentObject"] = businessObject;
}
return (ProjectTracker.Library.ProjectList)businessObject;
}
#endregion
#region 事件方法
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["currentObject"] = null;
//授权
ApplyAuthorizationRules();
}
else
ErrorLabel.Text = string.Empty;
}
#region GridView1
/// <summary>
/// 行删除之后引发此事件,清空Session,绑定GridView,因为之前采用的是理解删除,并且没有在DeleteObject事件中调用这两个动作,是无法将删除后的数据集合
/// 反映到GridView当中的,DataBind操作会引发SelectObject事件,这个事件中又调用了GetProjectList,方法中判断Sessions,已经是Null,导致从数据库载入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
//将Session清空会引发,从数据调用新的数据装载集合
Session["currentObject"] = null;
//这个操作会引发SelectObject事件
GridView1.DataBind();
}
protected void NewProjectButton_Click(object sender, EventArgs e)
{
// allow user to add a new project
// 跳转至编辑页面,添加一个新的对象
Response.Redirect("ProjectEdit.aspx");
}
#endregion
#endregion
#region 数据控制
#region ProjectListDataSource
/// <summary>
/// 删除动作,会引发这个事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ProjectListDataSource_DeleteObject( object sender, Csla.Web.DeleteObjectArgs e)
{
try
{
//转换Guid类型,调用静态方法立即上除一个项目
ProjectTracker.Library.Project.DeleteProject( new Guid(e.Keys["Id"].ToString()));
e.RowsAffected = 1;
}
catch (Csla.DataPortalException ex)
{
this.ErrorLabel.Text = ex.BusinessException.Message;
e.RowsAffected = 0;
}
catch (Exception ex)
{
this.ErrorLabel.Text = ex.Message;
e.RowsAffected = 0;
}
}
protected void ProjectListDataSource_SelectObject( object sender, Csla.Web.SelectObjectArgs e)
{
//获取,并放回给数据源控件
e.BusinessObject = GetProjectList();
}
#endregion
#endregion
}
}