Asp.Net服务器控件开发的Grid实现(一)

使用Asp.Net做Web开发时,系统提供的控件,有时难以达成所要的目的。这时,有多种方式可以解决,比如采用html+js的形式,在前端布局出所要的界面,然后再通过ajax等方式去获取数据,以达成目的。

但这样做,很是费劲,特别是当布局出来的界面需要重用的时候,更加费劲。有人,会直接将该界面的代码进行拷贝,但这对后来的维护必然带来更大的问题。所以就考虑,有没有一种方式可以让布局得到重用,又便于维护的。Asp.Net的控件可以很方便的布局,同时又能在后台中直接操作控件,实现相关的数据逻辑。所以就想借用asp.net的技术,来自行封装出控件。

有的人会说,直接使用asp.net的用户自定义控件封装,不也可以达到目的么?在一定程度上,确实是可以的。但是如果,我们需要更多的特性的时候,这个依然很难满足要求。特别是当我们在移动端使用一些库进行开发时,问题会更严重。

比如在移动端使用JqueryMobile进行开发时,由于JqueryMobile是基于前端的,所以对于后端的使用会有些棘手。这种情况,就可以考虑asp.net+jquerymobile来达成。(使用asp.net mvc4来结合jquerymobile的不属性该范围)

我们通过简单的封装,来实现一个Grid控件。先看一下效果图。

该效果图的前后面代码如下:

前端代码default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="Demo._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <S:Grid runat="server" ID="Grid_Edit">
                <Columns>
                    <S:BoundField runat="server" ID="BoundField1" HeaderText="货号" DataField="NO" />
                    <S:BoundField runat="server" ID="BoundField2" HeaderText="类型" DataField="Type" />
                    <S:BoundField runat="server" ID="BoundField3" HeaderText="状态" DataField="Status" />
                </Columns>
            </S:Grid>
        </div>
    </form>
</body>
</html>

其中带S前缀的控件就是封装的Grid控件。

后面代码default.aspx.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Demo
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InitLoad();
            }
        }

        private void InitLoad()
        {
            Grid_Edit.DataSource = GenerateData();
        }

        private DataTable GenerateData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("NO");
            dt.Columns.Add("Type");
            dt.Columns.Add("Status");

            dt.Rows.Add(new String[] { "H10001", "食品", "已售完" });
            dt.Rows.Add(new String[] { "H10002", "蔬菜", "待销售" });
            dt.Rows.Add(new String[] { "H10003", "水果", "待销售" });
            dt.Rows.Add(new String[] { "H10004", "器具", "销售中" });

            return dt;
        }
    }
}

给Grid_Edit的DataSource赋值。

从代码中可以看到,S:Grid内部有一个Columns,在Columns中还有S:BoundField字段,在S:BoundField字段中有HeaderText和DataField属性。

其中HeaderText就是列头,DataField就是绑定的字段,与后台代码的DataSource的字段对应。

这种操作方式与Asp.Net的GridView相似。

所以我们要封装出一个Grid,至少需要做以下几件事:

1.定义一个Grid类

2.在Grid类中包含Columns的属性。

3.在Columns的属性中,必须能够容纳BoundField字段。

4.必须在编辑器中能够直接敲出<Columns>。

具体实现,请看《Asp.Net服务器控件开发的Grid实现(二)》

时间: 2024-12-21 00:16:14

Asp.Net服务器控件开发的Grid实现(一)的相关文章

Asp.Net服务器控件开发的Grid实现(二)

我们先来实现Grid类,代码如下: Grid.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI; namespace AspNetS

Asp.Net服务器控件开发的Grid实现(四)回发事件

在使用Grid的时候,会用到链接跳转.如果只是普通的链接跳转,那只要使用a标签的href就可以实现.但是有时,我们希望在链接跳转的时候,能够引发回发事件,在后台作出一定的处理,然后再跳转.这样要如何实现呢?我们可以定义一个LinkButtonField来实现.代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text;

Asp.Net服务器控件开发的Grid实现(三)

下面是GridColumnsEditor的实现代码: GridColumnsEditor.cs using System; using System.Collections.Generic; using System.ComponentModel.Design; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI.WebControls; namespace AspNetS

asp.net服务器控件开发系列一

最近想写写博客记录下自己学习开发服务器控件. 第一步:搭建环境. 1.新建一个项目类库,用于保存控件: 2.新建一个Web工程,用于调用控件: 如图: 第二步:在控件类库下,新建一个服务器控件类TextBox.cs文件.代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Web; u

ASP.NET 2.0服务器控件开发的基本概念(转载)

利用ASP.NET 2.0技术,创建Web自定义服务器控件并不是一件轻松的事情.因为,这需要开发人员了解并能够灵活应用多种Web开发技术,例如,CSS样式表.客户端 脚本语言..NET开发语言.服务器控件开发技术,甚至是当前最火的AJAX技术等等.虽然现实如此"艰难",但是这种开发技术也不是真的难到不可掌握. 事事都要从头做起.本文将针对利用asp.net 2.0技术,创建Web自定义服务器控件的基础知识进行详细介绍,内容包括:服务器控件概念.控件类型.生命周期等. 1.ASP.NET

ASP.NET程序开发范例宝典

在整理资料时发现一些非常有用的资料源码尤其是初学者,大部分是平时用到的知识点,可以参考其实现方法,分享给大家学习,但请不要用于商业用途. 如果对你有用请多多推荐给其他人分享. 点击对应章节标题下载本章节下所有源代码. 目录: 第2章 HTML开发与实践 15 2.1 框架的使用 16 实例009 使用FrameSet框架布局聊天室 16 实例010 使用IFrame框架布局企业管理系统 17 2.2 滚屏的实现 18 实例011 滚动显示博客公告 18 实例012 滚屏效果并实现超级链接 20

asp.net 分布式应用开发

Net Framework推出的许多新技术为上述任务的实现提供了相对简单的解决方案.其中,基于SOAP的Web Service在处理分布式应用时具有比传统的DCOM/CORBA明显的优点,结合基于Web的ASP.NET页面开发技术和SQL Server数据存储技术(或Xml文档),在.Net下开发N层应用程序也不再困难. 一.分布式处理概述 分布式处理是将应用程序逻辑分布到2台或者更多台计算机上,在物理上或逻辑上分离的单元中.这一概念并不是新生事物,在大型工程已经得到广泛使用.只不过,Inter

ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: <input name="UserName&quo

ASP.NET服务器控件在IE10浏览器(非兼容模式)下报脚本错误的可能解决办法

关于IE10出现LinkButton点击无效的情况:        一般高配置的系统如Win7旗舰版SP1系统不会出现这种情况,针对家庭普通版和专业版的用户通过测试都有这种情况,对于开发人员要解决不同系统和IE的兼容问题一时有点摸不着头脑,可能微软发布IE10正式版本不久,兼容问题没有考虑周全,或者微软目的是指引用户向着高版本看齐最终目的推销win8,不管怎样,解决方法才是王道:       网上资料显示这种情况是ASP.NET无法检测IE10,导致_doPostBack未定义JavaScrip