FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5994|回复: 6
打印 上一主题 下一主题

Grid新增行的时候指定焦点列

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-27 13:06:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mfz 于 2014-7-27 13:16 编辑

表格默认添加新纪录的时候是在第一行第一列可编辑单元格内给定的焦点,但是很多时候并不是所有的列都不需要编辑,所以就需要指定列焦点,修改方法很简单:-----------------------------JS改动-------------------------------------------
如下:

ext-part2.js里面用Editplus打开第2753行左右找到这个函数: f_addNewRecord,
  // 添加一条新纪录
        f_addNewRecord: function (defaultObj, appendToEnd) {
            var i, count, store = this.getStore();
            var newRecord = defaultObj; //new Ext.data.Model(defaultObj);


            this.f_cellEditing.cancelEdit();


            var rowIndex = 0;
            if (appendToEnd) {
                store.add(newRecord);
                rowIndex = store.getCount() - 1;
            } else {
                store.insert(0, newRecord);
                rowIndex = 0;
            }
            this.f_cellEditing.startEditByPosition({
                row: rowIndex,
                column: this.f_firstEditableColumnIndex()
            });
        },

  1. // 添加一条新纪录
  2.         f_addNewRecord: function (defaultObj, appendToEnd) {
  3.             var i, count, store = this.getStore();
  4.             var newRecord = defaultObj; //new Ext.data.Model(defaultObj);


  5.             this.f_cellEditing.cancelEdit();


  6.             var rowIndex = 0;
  7.             if (appendToEnd) {
  8.                 store.add(newRecord);
  9.                 rowIndex = store.getCount() - 1;
  10.             } else {
  11.                 store.insert(0, newRecord);
  12.                 rowIndex = 0;
  13.             }
  14.             this.f_cellEditing.startEditByPosition({
  15.                 row: rowIndex,
  16.                 column: this.f_firstEditableColumnIndex()
  17.             });
  18.         },
复制代码


这个函数默认添加的焦点是在第一行第一列的可编辑区域,只需做如下扩展即可:
Copy这个函数改函数名:并加入一个参数:
      // 添加一条指定焦点列的新纪录
        f_addNewFocusColumnRecord: function (focusColumnIndex, defaultObj, appendToEnd) {
            var i, count, store = this.getStore();
            var newRecord = defaultObj; //new Ext.data.Model(defaultObj);


            this.f_cellEditing.cancelEdit();


            var rowIndex = 0;
            if (appendToEnd) {
                store.add(newRecord);
                rowIndex = store.getCount() - 1;
            } else {
                store.insert(0, newRecord);
                rowIndex = 0;
            }
            this.f_cellEditing.startEditByPosition({
                row: rowIndex,
                column:focusColumnIndex  
            });
        },

  1. // 添加一条指定焦点列的新纪录
  2.         f_addNewFocusColumnRecord: function (focusColumnIndex, defaultObj, appendToEnd) {
  3.             var i, count, store = this.getStore();
  4.             var newRecord = defaultObj; //new Ext.data.Model(defaultObj);


  5.             this.f_cellEditing.cancelEdit();


  6.             var rowIndex = 0;
  7.             if (appendToEnd) {
  8.                 store.add(newRecord);
  9.                 rowIndex = store.getCount() - 1;
  10.             } else {
  11.                 store.insert(0, newRecord);
  12.                 rowIndex = 0;
  13.             }
  14.             this.f_cellEditing.startEditByPosition({
  15.                 row: rowIndex,
  16.                 column:focusColumnIndex  
  17.             });
  18.         },
复制代码


保存到ext-part2.js-------------------------------------------------源代码改动------------------------------------
FineUI源代码里面找到Grid.cs这个类,添加两个重载:

       /// <summary>
        /// 获取添加一条指定焦点列的新纪录的客户端脚本
        /// </summary>
        /// <param name="focusColumnIndex">焦点列索引</param>
        /// <param name="defaultObject">缺省值</param>
        /// <param name="appendToEnd">是否添加到末尾</param>
        /// <returns>客户端脚本</returns>
        public string GetAddNewRecordReference(int focusColumnIndex,JObject defaultObject, bool appendToEnd)
        {
            return String.Format("{0}.f_addNewFocusColumnRecord({1},{2},{3});", ScriptID, focusColumnIndex, defaultObject.ToString(Formatting.None), appendToEnd.ToString().ToLower());
        }

  1. /// <summary>
  2.         /// 获取添加一条指定焦点列的新纪录的客户端脚本
  3.         /// </summary>
  4.         /// <param name="focusColumnIndex">焦点列索引</param>
  5.         /// <param name="defaultObject">缺省值</param>
  6.         /// <param name="appendToEnd">是否添加到末尾</param>
  7.         /// <returns>客户端脚本</returns>
  8.         public string GetAddNewRecordReference(int focusColumnIndex,JObject defaultObject, bool appendToEnd)
  9.         {
  10.             return String.Format("{0}.f_addNewFocusColumnRecord({1},{2},{3});", ScriptID, focusColumnIndex, defaultObject.ToString(Formatting.None), appendToEnd.ToString().ToLower());
  11.         }
复制代码
        /// <summary>
        /// 添加一条新纪录并指定焦点列索引
        /// </summary>
        /// <param name="focusColumnIndex">焦点列索引</param>
        /// <param name="defaultObject">缺省值</param>
        /// <param name="appendToEnd">是否添加到末尾</param>
        public void AddNewRecord(int focusColumnIndex,JObject defaultObject, bool appendToEnd)
        {
            PageContext.RegisterStartupScript(GetAddNewRecordReference(focusColumnIndex,defaultObject, appendToEnd));
        }
  1. /// <summary>
  2.         /// 添加一条新纪录并指定焦点列索引
  3.         /// </summary>
  4.         /// <param name="focusColumnIndex">焦点列索引</param>
  5.         /// <param name="defaultObject">缺省值</param>
  6.         /// <param name="appendToEnd">是否添加到末尾</param>
  7.         public void AddNewRecord(int focusColumnIndex,JObject defaultObject, bool appendToEnd)
  8.         {
  9.             PageContext.RegisterStartupScript(GetAddNewRecordReference(focusColumnIndex,defaultObject, appendToEnd));
  10.         }
复制代码


-----------------
保存后重新编译
即可完成所需要的功能;官方示例和改动后的例子如下:



官方示例和截图:
http://fineui.com/demo/#/demo/grid/grid_editor_cell_new.aspx新增数据的时候默认只能在用户名那列






改动后的效果:
后台只需添加一个参数即可指定新增数据时候的焦点列:
      // 第一行新增一条数据
                btnNew.OnClientClick = Grid1.GetAddNewRecordReference(6,defaultObj, AppendToEnd);










   // 第一行新增一条数据
                btnNew.OnClientClick = Grid1.GetAddNewRecordReference(3,defaultObj, AppendToEnd);







End!!!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
 楼主| 发表于 2014-7-27 13:17:08 | 只看该作者
红色为需要添加的代码,绿色为原来的代码
地板
发表于 2014-7-28 08:00:07 | 只看该作者
很实用!希望下个版本能集成
5#
发表于 2014-7-28 09:23:10 | 只看该作者
友情支持下
6#
发表于 2017-1-9 17:19:20 | 只看该作者
楼主有没有遇到关闭子窗体,父窗体中GRID的可编辑单元格定位焦点的时候??
7#
发表于 2017-1-9 17:19:46 | 只看该作者
楼主有没有遇到关闭子窗体,父窗体中GRID的可编辑单元格定位焦点的时候??
4.1.2版本无法定位,必须押下TAB键定位。
有的话,可以告知吗?谢谢!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-23 01:50 , Processed in 0.046287 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表