本帖最后由 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()
});
},
- // 添加一条新纪录
- 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()
- });
- },
复制代码
这个函数默认添加的焦点是在第一行第一列的可编辑区域,只需做如下扩展即可:
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
});
},
- // 添加一条指定焦点列的新纪录
- 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
- });
- },
复制代码
保存到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());
}
- /// <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());
- }
复制代码 /// <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));
}- /// <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));
- }
复制代码
-----------------
保存后重新编译
即可完成所需要的功能;官方示例和改动后的例子如下:
官方示例和截图:
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!!!
|