【转】快速开发平台:大湿教我写程序(3)之自动补全(屌丝没有春天)篇

一、女神也爱玩撸码

“在么,亲。”

“在!在!有,有事么”(我真睡醒了么!垂涎了好久的女神呀!高中同学,高一向她表白,"我想找个170以上的",高二等我长到170了“我想找个175的”,高三下血本买了双内增高“我喜欢178以上的,有安全感”)

三分钟后....

"没事也可找我的."擦,我TM怎么这么不争气,不是发过誓等她主动跟我讲话的时候就送她一个字:滚!

"有个网页不会做,你可不可以帮人家弄一下呀."

"弄,一定给你弄得妥妥的."

"坏死了,需求我离线发给你了,这个就靠你了啊."

"恩,靠我,靠我就对了"

QQ头像又黑掉了...

需求还好嘛.就是写一个采购单的录入界面而已.

二十分钟后收工,离线发送。

"亲,你好快呀,我先看看有没有问题哈,有问题还要麻烦你哦"



二、重湿AV之旅(此AV非彼AV详情请见上一篇博客《大湿教我写程序(2)之走向AV之路》)

"亲,还有两个小问题耶,采购单录入界面的表头上的供应商要可以自动补全,自动补全用户体验会好很多,客户会感觉很人性化。那个东东我把要求用标出来的你看看哈,可能有点难哦。"

"这东西对我来说就不叫个事儿,包在我身上."

这东西以前好像用过,自动补全的,ajaxcontroltoolkit,里面有CascadingDropDown控件.

引用一下ajaxcontroltoolkit,拉一个CascadingDropDown出来,关联一下文本框.然后写一个webservice,里面提供一个方法给它调用。OK,解决了。

看一下好像不对,女神要求的下拉框里有两列,一列是编码,一列是名称。这个只能显示一列。达不到要求呀,查了一遍属性没办法。

“大雄”

“大湿”

“死了啊”

“网速有点慢,我把快播的端口号限一下啊。”

“搞什么呀,又有什么问题了,我这刚准备陶冶一下情操你就。。。”

“恩,需求你看下,这个下拉框怎么搞。”

“教学视频看了这么多AV技术还是没学到家呀,典型的AV技术应用嘛。”

"AV技术我知道呀,用ajax去visit后台数据我知道怎么去抓。关键是怎么在前台展现呢?"

“苍老师用外语教的每一句话你都记得那么清楚,我上周刚教你的动态加载菜单(详情请见《大湿教我写.net通用权限框架(1)之菜单导航篇》)不就是讲的怎么动态构造html么?

前端说穿了其实很简单,不管多绚丽的界面都还是由那些最基本的html元素拼起来的。”

“好啦,讲半天还是得自己写,滚吧滚吧”

经他这么一说其实我心里也已经有了大致思路。

1、从后台把数据抓取出来

根据前台传过来的条件返回10条记录供界面显示

  /// <summary>
        /// 自动补全(显示10行)
        /// </summary>
        /// <param name="where">条件</param>
        /// <param name="param">参数化</param>
        /// <returns></returns>
        public DataTable autocomplete(StringBuilder where, SqlParam[] param)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT TOP 10 Supplier_ID,Code,ShortName,ValueAddRate FROM Base_Supplier WHERE 1=1");
            strSql.Append("AND DeleteMark =0 AND IsVisible = 0");
            strSql.Append(where);
            strSql.Append(" ORDER BY CreateDate");
            return DataFactory.SqlDataBase().GetDataTableBySQL(strSql, param);
        }

2、动态拼接要显示的内容

确实像大湿所有的那样,这个下拉自动填充框确实是由表格和字符组成。

在上一篇博文里已经讲了ajax如何调用后台方法,这里就不再重复。

抓取到供应商数据后进行一次遍历循环地拼接<tr>

<td>内容</td>

..............

</tr>

拼接好了以后就放入到div中根据Supplier_Name这个控件的位置加载出来。

然后选定了内容的时候再将选中的内容写入Supplier_Name控件中

Supplier_Name失去焦点时隐藏掉div.

//供应商自动补全
function SupplierAutocomplete() {
    $("#Supplier_Name").bind("keyup", function (e) {
        if (e.which != 13 && e.which != 40 && e.which != 38) {
            var parm = "action=autocomplete&search=" + escape($(this).val());
            Load_Supplier(parm);
        }
    }).focus(function () {
        var parm = "action=autocomplete&search=" + escape($(this).val());
        Load_Supplier(parm);
        $(this).select();
    });
    function Load_Supplier(parm) {
        getAjax(‘../../WMSBase/SysSupplier/Supplier_List.aspx‘, parm, function (data) {
            var json = eval("(" + data + ")");
            var html = "";
            for (var i = 0; i < json.JSON.length; i++) {
                var list = json.JSON[i];
                html += "<tr>";
                html += ‘<td style="display: none;">‘ + list.SUPPLIER_ID + ‘</td>‘;
                html += ‘<td style="width: 100px;">‘ + list.CODE + ‘</td>‘;
                html += ‘<td style="width: 200px;">‘ + list.SHORTNAME + ‘</td>‘;
                html += ‘<td style="display: none;">‘ + list.VALUEADDRATE + ‘</td>‘;
                html += "</tr>";
            }
            //点击事件回调
            autocomplete("Supplier_Name", "300px", "300px", html, function (r) {
                var array = new Array();
                array = r.split(‘≌‘);
                $("#Supplier_ID").val(array[0]);
                $("#Supplier_Name").val(array[2]);
                VALUEADDRATE = array[3];
            });
        });
    }
    //上,下键盘回调
    autocompletekeydown("Supplier_Name", function (r) {
        var array = new Array();
        array = r.split(‘≌‘);
        $("#Supplier_ID").val(array[0]);
        $("#Supplier_Name").val(array[2]);
        VALUEADDRATE = array[3];
    });
}

//自动补全表格
var IndetableRow_autocomplete = 0;
var scrollTopheight = 0;
function autocomplete(Objkey, width, height, data, callBack) {
    if ($(‘#‘ + Objkey).attr(‘readonly‘) == ‘readonly‘) {
        return false;
    }
    if ($(‘#‘ + Objkey).attr(‘disabled‘) == ‘disabled‘) {
        return false;
    }
    IndetableRow_autocomplete = 0;
    scrollTopheight = 0;
    var X = $("#" + Objkey).offset().top;
    var Y = $("#" + Objkey).offset().left;
    $("#div_gridshow").html("");
    if ($("#div_gridshow").attr("id") == undefined) {
        $(‘body‘).append(‘<div id="div_gridshow" style="overflow: auto;z-index: 1000;border: 1px solid #A8A8A8;width:‘ + width + ‘;height:‘ + height + ‘;position: absolute;  display: none;"></div>‘);
    } else {
        $("#div_gridshow").height(height);
        $("#div_gridshow").width(width);
    }
    var sbhtml = ‘<table class="tableobj">‘;
    if (data != "") {
        sbhtml += ‘<tbody>‘ + data + ‘</tbody>‘;
    } else {
        sbhtml += ‘<tbody><tr><td style="color:red;text-align:center;width:‘ + width + ‘;">没有找到您要的相关数据!</td></tr></tbody>‘;
    }
    sbhtml += ‘</table>‘;
    $("#div_gridshow").html(sbhtml);
    $("#div_gridshow").css("left", Y).css("top", X + 23).show();
    if (data != "") {
        $("#div_gridshow").find(‘tbody tr‘).each(function (r) {
            if (r == 0) {
                $(this).addClass(‘selected‘);
            }
        });
    }
    $("#div_gridshow").find(‘tbody tr‘).click(function () {
        var value = "";
        $(this).find(‘td‘).each(function (i) {
            value += $(this).text() + "≌";
        });
        if ($(‘#‘ + Objkey).attr(‘readonly‘) == ‘readonly‘) {
            return false;
        }
        if ($(‘#‘ + Objkey).attr(‘disabled‘) == ‘disabled‘) {
            return false;
        }
        callBack(value);
        $("#div_gridshow").hide();
    });
    $("#div_gridshow").find(‘tbody tr‘).hover(function () {
        $(this).addClass("selected");
    }, function () {
        $(this).removeClass("selected");
    });
    //任意键关闭
    document.onclick = function (e) {
        var e = e ? e : window.event;
        var tar = e.srcElement || e.target;
        if (tar.id != ‘div_gridshow‘) {
            if ($(tar).attr("id") == ‘div_gridshow‘ || $(tar).attr("id") == Objkey) {
                $("#div_gridshow").show();
            } else {
                $("#div_gridshow").hide();
            }
        }
    }
}

写完了我都不敢相信,我现在竟然能写出这么一大段JS代码了,这就是女神的力量呀。

那妹子太粗心,供应商需要自动补全,采购员也需要自动补全的,那就一并写了吧.
这里以JS代码的形式实现功能有助于大家理解原理,其实这类公用的代码完全可以封装成控件,就不用看这一大砣恶心的东西了。

运行一下看。。。

没道理呀还是没有自动补全。

“大雄,显示不出来呀!”

“我擦,函数都写好了,你没有去调用它,怎么会显示。就像你泡妹子一样,有了邪恶的念头和方法,但是对具体的对象去使用。肯定不会有什么收获。那是YY”

好吧,我再改

//初始化

$(function () {
    divresize_From(50);
    SupplierAutocomplete();
    SalesmanAutocomplete();
})

再次运行

搞定,编号和名称都可以带出来

再次发送过去.

“大雄,我越写js就越发现js跟C#其实很像,我们这里的初始化不就相当于C#里的Page_Load么,一进入页面先执行这里面的东西。”
“是的,写到后面你会发现几乎所有的语言都是相通的。就像所有的女人都一样,都可以暖背窝、生娃、搜你私房钱。”



三、屌丝没有春天

"亲,忘了跟你讲,下面表格里的物料名称也要下拉填充。"

“这人,话都不会一次讲清楚,VS都关了,这不耍我么?”

“2B了吧,这明显调戏你嘛,太不上道了。”

“也是啊,虽然穷点,但是我长得帅呀,虽然帅不能拿去ATM机当卡刷,看着也舒服呀,专治各种内分泌失调、各类妇科疑难杂症。有眼光。”

“擦,你还当真。”

“不跟你说了,我要用心为女神服务。”

原理都一样,抓取不同的数据而已。5分钟后搞定。

再顺手帮她把导航页也改一下风格,服务就要做全套嘛,谁让我是服务系的。

“亲,全部弄好了,你看看都可以不。”

三分钟后...

“简直屌爆天了,要的就是这效果,我老婆洗澡去了,我替她谢过你了,兄弟!”

擦!谁TM说屌丝也有春天。。。硬盘中的女神才是屌丝的春天。

谨以此文献给像我一样的菜鸟。

附demo地址:

http://www.learun.cn 力软官网

http://www.learun.cn:8080  在线demo

时间: 2024-12-29 01:38:34

【转】快速开发平台:大湿教我写程序(3)之自动补全(屌丝没有春天)篇的相关文章

ASP.net教程]大湿教我写.net通用权限框架之菜单导航篇

一.坑爹的老板 “我X!这个项目是要商业应用的,你还想用easyUI,500美刀的授权费用.一个项目才赚多少钱!赶紧给我换了,明天去客户那边要做demo的,今天晚上必须给我赶出来!不懂的去问大雄”黄总对我又是一通大吼. 我容易嘛我,以前做CS架构系统的,现在突然让我转BS,前端开发实在太费力了.更要命的是还碰上一个SB坑爹的小老板.公司一共就三个人,老板(抠得要死,不知道怎么讨到老婆的).大雄(大湿级攻城湿,BS前端开发大牛).我(屌丝码农). 二.开工搞起 好吧,老板都发话了,自己重做吧,啥都

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 大数据支持分表优化

公司的短信平台,数据量越来越大了,需要对数据进行一些优化,下面是拆分后的数据库量参考. 新开发的软件模块,必须支持分表,拆表的功能一个数据表里,不适合保存1000万以上的记录新开发的业务模块,能分表的全分表,否则,将来我们无法用其他小型数据库,例如mysql 现在系统的短信已经进行了拆表接着打算把日志也进行拆表确保数据库里,没有庞大的表,随时可以切换数据库 每个人把自己负责的事情,做到自己能力的及至,做到部门能力的及至,公司能力的及至,就很有希望了有时候我说话很随意,但是一般会注意,我说出去的话

开发指南专题五:JEECG微云快速开发平台代码生成器

开发指南专题五:JEECG微云快速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,需要先配置好本机的maven环境,并在eclipse中安装好m2eclipse插件. 1. maven版本的工程目录,代码结构如图311所示. 2. 针对本机开发环境(这里以eclipse为例),调整依赖包和项目属性 首先在工程上右键->properties,在builders选项卡中删除掉不存在或不需要的builders,如图312所示. 然后进入Java Bu

SNF快速开发平台3.0之--MVC 打印解决方案

SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常用这个方法. 按规定要求放于指定位置:Areas->Sys->Reports->BaseRole.mrt 打开对应的页面功能,点击打印即可,也可以在线编辑报表 第一步:配置打印按钮 第二步:配置打印方法 //打印 this.printClick = function () { snf.ope

开个博客记录django快速开发平台的开发进度

是的,我来重复的造个轮子! 造这个轮子是因为我没有找到合适的.使用django开发的快速开发平台. 今天开始尝试自己写一个快速开发平台的框架,将来开发业务系统时应该会用得上. So, 开个贴子纪念一下! 为什么要造轮子 django自带了admin后台可以快速的对model进行CRUD操作,而我呢由于严重的惰性使然, 不想再重新做一整套对model进行CRUD操作的界面了,虽然还有很多第三方库可以使用,但总觉得不适合国情(也或许是我没有找到,欢迎大家推荐),所以我的想法是直接在django ad

Java web自定义标签按钮级别权限控制完美诠释(jplogic 快速开发平台)

接下来跟大家聊聊JavaWeb中权限控制,往大的方向说可以聊聊整合应用系统中的权限控制.在聊权限控制之前先跟大家聊聊RBAC.那么什么是RBAC呢?RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联的,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.角色可依新的需求和系统的

浅谈各类RAD快速开发平台存在的意义

今天和大伙谈论一个话题,市面上的各类快速开发平台存在意义.本人在RAD快速开发平台领域有一定研究!既处于对这个东西兴趣也是工作上的需要.曾几何时我们开发一套管理应用程序我们都需要从零开始.无数重复的工作量浪费了我们时间.不管是工作上时间还是个人的私人时间.重点是大大延长了我们了我们的项目周期.除了这个之外,还可能出现质量无法保证的问题.后期的维护工作量也会增大整合项目的维护成本.随着计算机技术发展,企业需要快速迭代产品实现盈利,不至于因为项目周期长,影响项目的整体计划.最后发现虽然产品做出来了!

SNF开发平台WinForm之十三-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework

一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void UCTimeAxisData() { //增加节点 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); list.Add(new KeyValueP

【转】这个ASP.NET 快速开发平台,真的可以让你按时下班把妹撩?

从事软件行业也有几年了,软件行业的发展,可以说是日新月异.从中也学到了不少知识,每天都在丰富自己.但是,软件行业大多都有一个通病--加班,加班不单是员工的烦恼,也是公司的毒瘤.大工作量,造成了加班这一现象. 但是,细细回想,我们这些码农真的有这么多的代码要撸吗?有多少是我们的重复工作.我们非常熟悉业务流程,完成业务功能的开发只需要两小时,但是所有的东西都需要重新开发,以前的代码太乱了,框架要重新搭建,基础资料要开发,权限要实现,大多数时间都用在了用户不关心不能直观感受的东西上面,加了好几个班赶出