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


    一年多没写代码了,感觉真落伍了,今天想起一个东西,写出来跟大家分享下。

    先看图说明:

    如图所示,上面两个列表都是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();
            } 
    }

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

  • 相关阅读:
    Android NDK 学习之传递类对象
    https://www.aminer.cn/ AI研究
    MYSQL 的一些文件及说明
    Windows下移动MariaDB数据目录 (转!)
    MariaDB Galera Cluster 10.1 只支持 LINUX ?!
    MARIADB 在 OPENSUSE 的安装。
    “命令行程序”的通用图形界面 (转)
    代码生成的地址:mygeneration
    上海力软--快速开发框架
    康力优蓝机器人 -- 优友U05类人型机器人发布
  • 原文地址:https://www.cnblogs.com/benz/p/ManagerGridView.html
Copyright © 2020-2023  润新知