环境:vs2010、sqlserver 2008 express,以数据库和母版为基础。
一、使用编写UI界面层。
<%@ Page Title="" Language="C#" MasterPageFile="~/manage.Master" AutoEventWireup="true"
CodeBehind="unit_manage_test.aspx.cs" Inherits="website.unit_manage1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MenuTitle" runat="server">
<span class="STYLE1">单位设置</span>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="SelectMenu" runat="server">
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="Content" runat="server">
<%--进行编辑时,会启动itemediting事件、进行更新时会启动itemupdating事件、点击取消时会启动itemcanceling事件--%> <%--进行删除时,会启动ItemDeleting事件--%> <%--进行插入时,会启动ItemInserting事件,同时,显示插入界面,需要加上InsertItemPosition="LastItem"--%> <%--进行取消时,会启动ItemCanceling事件--%> <%--进行分页datapager时,会启动PagePropertiesChanging事件--%> <%--数据绑定时,添加删除确认信息会启动ItemDataBound事件--%> <%--ListView还需要附加一个关键字字段:DataKeyNames="UGID"--%> <asp:ListView ID="LV1" runat="server" DataKeyNames="UGID" OnItemCanceling="LV1_ItemCanceling"
OnItemEditing="LV1_ItemEditing" OnItemUpdating="LV1_ItemUpdating" OnItemDeleting="LV1_ItemDeleting"
InsertItemPosition="LastItem" OnItemInserting="LV1_ItemInserting" OnPagePropertiesChanging="LV1_PagePropertiesChanging1"
OnItemDataBound="LV1_ItemDataBound">
<ItemTemplate>
<tr>
<td height="20" bgcolor="#FFFFFF" class="STYLE6">
<div align="center">
<span class="STYLE19">
<asp:Label ID="UName" runat="server" Text='<%#Eval("UName") %>' /></span></div>
</td>
<td height="20" bgcolor="#FFFFFF">
<div align="center" class="STYLE21">
<asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />
</div>
</td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr>
<td height="20" bgcolor="#FFFFFF" class="STYLE6">
<div align="center">
<span class="STYLE19">
<asp:TextBox ID="UNameTextBox" runat="server" Text='<%# Bind("UName") %>' />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="请输入要更新的单位名称" ControlToValidate="UNameTextBox" Display="Dynamic" ValidationGroup="edit" CssClass="neterror"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="只能输入中文英文和数字" ControlToValidate="UNameTextBox" ValidationExpression="^[\u4e00-\u9fa5|a-z|A-Z|0-9]+$" Display="Dynamic" ValidationGroup="edit" CssClass="neterror"></asp:RegularExpressionValidator>
</span>
</div>
</td>
<td height="20" bgcolor="#FFFFFF">
<div align="center" class="STYLE21">
<asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" ValidationGroup="edit" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" />
</div>
</td>
</tr>
</EditItemTemplate>
<InsertItemTemplate>
<tr>
<td height="20" bgcolor="#FFFFFF" class="STYLE6">
<div align="center">
<span class="STYLE19">
<asp:TextBox ID="UNameTextBox" runat="server" Text='<%# Bind("UName") %>' />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="请输入要添加的单位名称" ControlToValidate="UNameTextBox" CssClass="neterror" ValidationGroup="add" Display="Dynamic"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="只能输入中文英文和数字" ControlToValidate="UNameTextBox" CssClass="neterror" ValidationExpression="^[\u4e00-\u9fa5|a-z|A-Z|0-9]+$" ValidationGroup="add" Display="Dynamic"></asp:RegularExpressionValidator>
</span>
</div>
</td>
<td height="20" bgcolor="#FFFFFF">
<div align="center" class="STYLE21">
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="添加" ValidationGroup="add" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" />
</div>
</td>
</tr>
</InsertItemTemplate>
<EmptyDataTemplate>
<tr>
<td height="20" bgcolor="#FFFFFF" colspan="2">
没有单位信息。
</td>
</tr>
</EmptyDataTemplate>
<LayoutTemplate>
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#a8c7ce">
<tr>
<td height="20" bgcolor="d3eaef" class="STYLE6">
<div align="center">
<span class="STYLE10">单位名称</span></div>
</td>
<td width="22%" height="20" bgcolor="d3eaef" class="STYLE6">
<div align="center">
<span class="STYLE10">基本操作</span></div>
</td>
</tr>
<tr id="itemPlaceholder" runat="server">
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<div align="center">
<asp:DataPager ID="Pager" runat="server" PageSize="12" PagedControlID="LV1">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />
</Fields>
</asp:DataPager>
</div>
</td>
</tr>
</table>
</LayoutTemplate>
</asp:ListView>
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="Footer" runat="server">
</asp:Content>
要点:编制界面层时,插入,删除,编辑,取消按钮必须为:
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="添加" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" />
<asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" />
<asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />
这是系统内定的按钮名称,引发相应的操作。
二、编写CS文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Model; //使用实体层
using BLL; //使用业务层
namespace website
{
public partial class unit_manage1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) //判断是否是第一次访问,给于LISTVIEW绑定
{
Bind();
}
}
private void Bind() //绑定方法 listview显示必需
{
LV1.DataSource = new DJ_UserUnitManager().UserUnit_Show(); //后半段为记录集添加到LIstView源
LV1.DataBind();
}
protected void LV1_ItemCanceling(object sender, ListViewCancelEventArgs e) //当按取消时 取消必须
{
LV1.EditIndex = -1; //返回原始状态。
Bind(); //在次绑定listView显示
}
protected void LV1_ItemEditing(object sender, ListViewEditEventArgs e) //当按编辑时,显示编辑层 编辑显示必须
{
LV1.EditIndex = e.NewEditIndex; //需要编辑的项目为点击编辑的那一行
Bind();
}
protected void LV1_ItemUpdating(object sender, ListViewUpdateEventArgs e) //当编辑完,点击更新时 更新必须
{
int id = int.Parse(LV1.DataKeys[e.ItemIndex].Value.ToString()); //获取listview定义的datakeyname所设置的值,一般是ID
//string newvalue = (string)e.NewValues["UName"].ToString().Trim(); //获取新的值,有tostring时,得出空值出错
string newvalue = ((TextBox)LV1.Items[e.ItemIndex].FindControl("UNameTextBox")).Text.ToString().Trim();
if (newvalue != "") //如果更新值不为空
{
DJ_UserUnit uns = new DJ_UserUnit();
uns.UName = newvalue;
uns.UGID = id;
bool res = new DJ_UserUnitManager().UserUnit_Modi(uns); //以上几个都为数据类型判断,此句为进行更新
LV1.EditIndex = -1; //更新成功,返回
Bind();
}
else
{
LV1.EditIndex = -1; //如果更新值为空,刚返回不进行更新
e.Cancel = true; //取消更新进程
Bind();
}
}
protected void LV1_ItemDeleting(object sender, ListViewDeleteEventArgs e) //点击删除按钮时 删除必需
{
int id = int.Parse(LV1.DataKeys[e.ItemIndex].Value.ToString()); //获取listview定义的datakeyname所设置的值,一般是ID
//Response.Write(id);
if (id > 0) //如果id不为0时
{
DJ_UserUnit uns = new DJ_UserUnit();
uns.UGID = id;
bool res = new DJ_UserUnitManager().UserUnit_Del(uns); //删除
LV1.EditIndex = -1; //返回原界面
Bind();
}
else
{
LV1.EditIndex = -1;
e.Cancel = true;
Bind();
}
}
protected void LV1_ItemInserting(object sender, ListViewInsertEventArgs e) //当插入时,插入必需
{
string value = ((TextBox)e.Item.FindControl("UNameTextBox")).Text; //获取插主TextBox的值
if (value != "") //如果值不为空
{
DJ_UserUnit uns = new DJ_UserUnit();
uns.UName = value;
bool res = new DJ_UserUnitManager().UserUnit_Join(uns); //插入
LV1.EditIndex = -1;
Bind();
}
else
{
LV1.EditIndex = -1;
e.Cancel = true;
Bind();
}
}
protected void LV1_PagePropertiesChanging1(object sender, PagePropertiesChangingEventArgs e) //datapager分页控件进行分页时
{
DataPager Pager = (DataPager)LV1.FindControl("Pager");
Pager.SetPageProperties(e.StartRowIndex, e.MaximumRows, false); //设置分页,分页必需
//Bind();
}
protected void Page_PreRender(object sender, EventArgs e) //用于DataPager绑定数据,可防止daapager不听使唤。分页必需
{
Bind();
}
protected void LV1_ItemDataBound(object sender, ListViewItemEventArgs e) //给删除按钮添加删除确认信息
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Button btn = e.Item.FindControl("DeleteButton") as Button;
if (btn != null)
{
btn.Attributes.Add("onclick", "javascript:return confirm('你确认要删除:\"" +(e.Item.FindControl("UName") as Label).Text + "\"吗?')");
}
}
}
}
}
要点:
以上所写必须的方法,是进行增删查改所必须的,datapager分页控件,也必需的那两个方法,也是缺一不可。
总结:
有了这几个方法。listview就可以摆脱objectdatasource直接进行代码绑定操作。
存在的问题:
1、datapager+listview分页,只适用于小数据量,当大数据量时,显示很慢。本人做过实验,50万数据,分一次页需要6-10。纠其原因,为datapager分页是把所有显示的内容全都查询出来然后在进行分页,从而导致速度超慢。所以datapager+listview分页只适合小数据量。下一步,转而使用AspNetPager分页控件进行分页。
2、界面层无法使用jquery Validate进行客户端验证,个人认为是因为控件都在listview中,使用<%=UNameTextBox.UniqueID %>无法获得UNameTextBox控件的name。或许是可以访问的,但是辗转用方法获得控件的name,还不如直接用vs.net自带的验证控件。
其它基本没什么问题了。