文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>解决些重复性工作---对GridView的一个扩展方案

解决些重复性工作---对GridView的一个扩展方案

时间:2011-04-12  来源:马圆圆

看图说明:

如图所示,上面两个列表都是gridview创建,其中红色部分两个表都相同,而中间紫色部分根据内容不同而发生改变。以往的工作当中,我都是在gridview当中对所有列进行定义,很明显的对公用部分都做了很多重复性的工作。不知道各位是怎么处理这种情况的?

今天对gridview进行了下扩展,初步出了个思路,下面将方案列出,其中还有些困惑,希望高手能讨论解答。

1、首先创建一个ManagerGridView 类,继承gridview,我这里写在app_code中,自定义控件项目不熟练。

namespace MyControl
{
    public class ManagerGridView : GridView
    {
        public ManagerGridView()
        {
        }        
    }
}

2、针对公用列创建两个web 用户控件

(1)索引列 :GvIndex.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="GvIndex.ascx.cs" Inherits="UserControl_GvIndex" %>
<%=(this.Parent.Parent as GridViewRow).DataItemIndex+1 %>

(2)操作列 :GvOprate.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="GvOprate.ascx.cs" Inherits="GvOprate" %>
<asp:Button ID="btEdit" runat="server" Text="修改" CommandName="EditRow" CommandArgument='<%#Eval("id") %>' />
<asp:Button ID="btDelete" runat="server" Text="删除" CommandArgument='<%#Eval("id") %>'
    OnClientClick="return confirm('删除是不可恢复的操作,继续吗?');" CommandName="DeleteRow" />

这里的处理暂时以rowcommand的方式处理,Button加上CommandName

3、在ManagerGridView 中引入两列,这里需要重写GridView的OnInit事件。

  protected override void OnInit(EventArgs e)
        {
            //插入索引列
            TemplateField ind = new TemplateField();
            ind.ItemTemplate = Page.LoadTemplate("~/UserControl/GvIndex.ascx");
            this.Columns.Insert(0, ind);
            ind.HeaderText = "序号";

            //插入操作列
            TemplateField opr= new TemplateField();
            opr.ItemTemplate = Page.LoadTemplate("~/UserControl/GvOprate.ascx");
            this.Columns.Add(opr);
            opr.HeaderText = "操作";

            base.OnInit(e);
        }

好,扩展暂时告一段落。

4、扩展的使用,以部门管理页面为例 DeptManager.aspx

(1)在页面注册这个控件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DeptManager.aspx.cs" Inherits="Crm_DeptManager" %>
<%@ Register Namespace="MyControl" TagPrefix="Mc" %>

(2)在页面使用控件

 <Mc:ManagerGridView ID="GvDept" runat="server"   
                AutoGenerateColumns="False"   Width="600px"    
                RowStyle-HorizontalAlign="Center" onrowcommand="GvDept_RowCommand" >
           <Columns>
            <asp:BoundField DataField="PartName" HeaderText="部门名称" />
                <asp:BoundField DataField="Description" HeaderText="部门描述" />               
           </Columns>
          </Mc:ManagerGridView>

从上面可以看出,我们只需要在Columns中添加部门名称和描述两列,响应事件添加onrowcommand。

(3)在后台绑定数据,与gridview的用法一样。

(4)处理事件

protected void GvDept_RowCommand(object sender, GridViewCommandEventArgs e)
{
        if (e.CommandName == "EditRow")
       {
            EdieDepart();
        }
        else
        {
            DeleteDepart();
        } 
}

以上为整个方案的思路,还有很多不完善的地方,欢迎各位提意见。

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载