手动绑定ListView的操作,不使用ObjectDataSource

 

环境: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自带的验证控件。

 

其它基本没什么问题了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值