上回模拟的是下拉grid,这回我把下拉grid和表格自动补全放一起了,实在是好做,但是也有很多要注意的,现在分享下,大家学习。

接上回 传送门

 1. 有个tbxMyBox1_TriggerClick方法直接重写了,目的是显示下拉的列表,直接上代码注意看注释,grid ID是grid2
     function tbxMyBox1_TriggerClick() {
//先隐藏
F('<% =Grid2.ClientID%>').hide();
//位置设定样式
$('#Grid2_wrapper').css('top', $("#<% =TriggerBox1.ClientID %>-triggerWrap").offset().top + $("#<% =TriggerBox1.ClientID %>-triggerWrap").height());
$('#Grid2_wrapper').css('left', $("#<% =TriggerBox1.ClientID %>-triggerWrap").offset().left);
$('#Grid2_wrapper').css('position', 'fixed');
$('#Grid2_wrapper').css('z-index', '9999');
//显示方法
F('<% =Grid2.ClientID%>').show(F('<% =TriggerBox1.ClientID %>').getEl(), function () {
});
}

  

下面问题来了:学挖掘机技术...不是这个
  grid 显示出来老在那呆着,找了半天才找见解决方案,点击grid2以外自动隐藏grid2,加上这句
 
                //页面的点击事件
$(document).click(function (e) {
var target = $(e.target);
//判断是否点击的位置,是gird和当前编辑的TriggerBox1就不变,点击其他位置就隐藏grid
//closest是一层层找上层元素,找不到返回0,可以在网上看看例子
//第二个判断是grid是否隐藏,显示的再触发隐藏
if (target.closest("#<% =Grid2.ClientID%>").length == 0 && !F('<% =Grid2.ClientID%>').isHidden() && target.closest("#<% =TriggerBox1.ClientID%>").length == 0) {
showhide();
}
});

  加到show方法里,在grid2show出来之后触发。全:

		 function tbxMyBox1_TriggerClick(t) {
//先隐藏
F('<% =Grid2.ClientID%>').hide();
//位置设定样式
$('#Grid2_wrapper').css('top', $("#<% =TriggerBox1.ClientID %>-triggerWrap").offset().top + $("#<% =TriggerBox1.ClientID %>-triggerWrap").height());
$('#Grid2_wrapper').css('left', $("#<% =TriggerBox1.ClientID %>-triggerWrap").offset().left);
$('#Grid2_wrapper').css('position', 'fixed');
$('#Grid2_wrapper').css('z-index', '9999');
//显示方法
F('<% =Grid2.ClientID%>').show(F('<% =TriggerBox1.ClientID %>').getEl(), function () {
//页面的点击事件
$(document).click(function (e) {
var target = $(e.target);
//判断是否点击的位置,是gird和当前编辑的TriggerBox1就不变,点击其他位置就隐藏grid
//closest是一层层找上层元素,找不到返回0,可以在网上看看例子
//第二个判断是grid是否隐藏,显示的再触发隐藏
if (target.closest("#<% =Grid2.ClientID%>").length == 0 && !F('<% =Grid2.ClientID%>').isHidden() && target.closest("#<% =TriggerBox1.ClientID%>").length == 0) {
showhide();
}
});
});
}

  

 showhide();以前写了,就不写了。显示出来了。
2. 问题又来了,当点击grid1外的位置编辑列还原了,就是又变为正常状态,输入框没了,好像是以前写过startEditByPosition是编辑方法,在ext-part2.js里找到的,有图为证
 
字面意思就是开始编辑的位置,参数是行号和列号。这个方法的用处就是点击gird2时
参数grid1的beforeedit事件
        F.ready(function () {
//浮动grid2能跑加上就不跑了
F('<% =Grid2.ClientID%>').draggable = false;
//编辑之前的事件
F('<% = Grid1.ClientID %>').on('beforeedit', function (editor, e) {
//列名
if (e.field == 'Name') {
//列号
window._selectrowIndex = e.rowIdx;
window._selectcellIndex = e.colIdx;
}
return true;
});
});

 当项目点击事件里随时改变编辑位置,这个事件也是斟酌过的,其他的事件有刷新,一眼就看出来了,这个事件看不见刷新。

 

            //项点击事件
F('<%= Grid2.ClientID %>').on('itemmousedown', function (View, record, item, index, e) {
F('<% =Grid1.ClientID%>').f_cellEditing.cancelEdit();
F('<% =Grid1.ClientID%>').f_cellEditing.startEditByPosition({
row: _selectrowIndex, column: _selectcellIndex
});
});

  3. 就差点击事件了,我用了表格的双击事件,前台js触发,可能是用惯了

            F('<% =Grid2.ClientID%>').on('itemdblclick', function (grid, record, item, index) {
F.customEvent('Grid2_click_' + index);
F('<% =Grid2.ClientID%>').hide();
});

  后台:

		protected void PageManager1_CustomEvent(object sender, CustomEventArgs e)
{
if (e.EventArgument.IndexOf("Grid2_click_") >= 0)
{
int index = Convert.ToInt32(e.EventArgument.Split('_')[2].ToString());
string name = Grid2.Rows[index].Values[Grid2.FindColumn("Name").ColumnIndex].ToString();
DataTable table = GetDataTable();
foreach (DataRow row in table.Rows)
{
if (row["Name"].ToString() == name)
{
string deleteScript = Grid1.GetDeleteIndexReference();
//string deleteScript = "";
JObject defaultObj = new JObject();
defaultObj.Add("Name", row["Name"].ToString());
defaultObj.Add("Gender", row["Gender"].ToString());
defaultObj.Add("EntranceYear", row["EntranceYear"].ToString());
defaultObj.Add("EntranceDate", row["EntranceDate"].ToString());
defaultObj.Add("AtSchool", (bool)row["AtSchool"]);
defaultObj.Add("Major", row["Major"].ToString());
PageContext.RegisterStartupScript(
deleteScript //删除当前行
+ Grid1.GetAddNewRecordReferenceByindex(defaultObj) //新增定义的行
+ "");//把窗体管理
}
}
}
}

  

实例源码:CSDN 10分

ASP.NET-FineUI开发实践-8的更多相关文章

  1. FineUI开源版(ASP.Net)开发实践-目录

    点我订阅 目前所有博客的截图,方便离线观看,点图片 FineUI初学手册 下载,实例项目搭建 FineUI初学手册-部分JS整理 部分JS整理 ASP.NET-FineUI开发实践-1 实际开发环境是 ...

  2. FineUI开发实践-目录

    点我订阅 目前所有博客的截图,方便离线观看,点图片 FineUI初学手册 下载,实例项目搭建 FineUI初学手册-部分JS整理 部分JS整理 ASP.NET-FineUI开发实践-1 实际开发环境是 ...

  3. FineUI开发实践

    ASP.NET-FineUI开发实践-7 摘要: 下拉显示grid列表.其实很简单,但是试了很多方法,水平有限,主要是都不好使,还是简单的好使了,分享下.先是看了看网上的,是直接写个了extjs控件类 ...

  4. ASP.NET-FineUI开发实践-9(四)

    现在是这么个问题,在开发中表格是动态出来的,就是标准板是全部字段列出,客户要根据情况列出自己想要的,在增加操作页面的同时要是能用前台自带的功能直接保存到后台就好了,现在的列显示和隐藏是不回发的. 1. ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  10. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

随机推荐

  1. Linux导航神器-----autojump

    对于命令行用户来说,频繁的cd和tab应该是日常工作中最多使用的命令了.特别对于重度用户来说,如果可以省去这么多cd和tab,将更多的时间做有意义的事该多好.其实Linux的学习过程本身就行这样.你会 ...

  2. winform批量查询单号剔除重复

    //查询分单函数        private string GetQueryInSubbillNo()        {            string strSubbillNO = " ...

  3. laravel观察者模式

    laravel观察者模式: 事件

  4. Lang语言包

    \languages\zh_cn\admin\common.php里配置后台所有常量

  5. centos 下 搭建 php 环境

    本文详细阐述在 Linux 系统中搭建 PHP 环境,由于 PHP 就是由 C 语言编写的,最初也是运行在 Linux 系统中,所以Linux 是 PHP 的最佳环境. 关于本文中使用到的软件,请点击 ...

  6. 关于 wait_event_interruptible() 和 wake_up()的使用

    来源:http://blog.csdn.net/allen6268198/article/details/8112551 1. 关于 wait_event_interruptible() 和 wake ...

  7. 第六周 G题

    G - 数论,最大公约数 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Desc ...

  8. Fireworks Extension —— AutoSlice 介绍

    前不久在网上到处瞎晃的时候,发现Adobe的软件几乎都可以写插件.Fireworks更是很早的版本就支持使用javascript编写插件,于是乎如入桃园,奋斗几日为VD小伙伴们写了一个插件,命名Aut ...

  9. 7.3.1 Establishing a Backup Policy

    7.3 Example Backup and Recovery Strategy 备份和恢复策略实例 7.3.1 Establishing a Backup Policy 7.3.2 Using Ba ...

  10. JavaScript权威指南学习笔记6

    这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...