Gridview如何实现敲回车进入下一行,或者用方向键在不同的行之间切换?
2008-04-25 15:06
666 查看
/*
///本函数
afce
是在keypressed2上扩展得来.对keypressed2进行优化及按目前需求增加相应功能
///ZLJ 2007-11-05-22:00
/// 在datagrid里,跟据所按下的方向键,对当前光标位置做相对应的跳转
///缺陷:目前只能对Datagrid中的textbox模板列进行控制.
若为最后一列时,则光标转向下一行的第一列,若为最后一行的最后一列则按向右光标键不做反应。
若为第一列时,按向左则光标转向上一行的最后一列。
若为最后一行时,按向下光标则新增一行
若为第一行时,按向上光标则不做反应。
若下一个目的地只是单纯的表格,没有子控件(textbox),则继续寻找下一个单元格,直到找到适合的单元格为止
*/
function keyPressed(TB)
{
var tblGrid = document.getElementById("DataGrid1");
var TBID = document.getElementById(TB);//当前ID
var CurCellID=TBID.parentElement;//当前TD
var CurCellIndex=CurCellID.cellIndex;//当前是第几列
var CurRowIndex= CurCellID.parentElement.rowIndex;//当前是第行;
var rowcount = tblGrid.rows.length; //总行
var CellCount =tblGrid.rows[CurRowIndex].cells.length;//当前行的总列数
var TargateRow=-1 ;//目标行(默认值为-1)
var TargateCell=-1 ;//目标列 (默认值为-1)
var R,C;
if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40|| event.keyCode == 13)
{
if (tblGrid.rows[CurRowIndex].cells[CurCellIndex].children[0] != null)
{
if (tblGrid.rows[CurRowIndex].cells[CurCellIndex].children[0].id == TBID.id)
{
//向下光标****************************************************************************
if (event.keyCode == 40 )//Buttom
{
if (CurRowIndex <rowcount-1)
{
if (tblGrid.rows[CurRowIndex + 1].cells[ CurCellIndex].children[0] != null)
{
if (tblGrid.rows[CurRowIndex + 1].cells[ CurCellIndex].children[0].type == 'text')
{
//downvalue
tblGrid.rows[CurRowIndex + 1].cells[CurCellIndex].children[0].focus();
return false;
}
}
}
else
{
//当在最后一行按向下光标键时,新增一行空白行
}
}
//END****************************************************************************
//向上光标(当前行必须大于第一行)******************************************************
if (event.keyCode == 38 && CurRowIndex > 1 )//up
{
if (tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0] != null)
{
if (tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0].type == 'text')
{
//upvalue
tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0].focus();
return false;
}
}
}
//END****************************************************************************
//向左光标(当前列为第0列时则转向上一行的最后一列)*******************************
if (event.keyCode == 37 )//left
{
Outer:
for (R=CurRowIndex; R > 0 ;R--)
{
for (C=CurCellIndex-1;C> =0;C-- )
{
if (tblGrid.rows[R].cells[C].children[0] != null && tblGrid.rows[R].cells[C].children[0].type == 'text')
{
TargateRow=R;
TargateCell=C;
break Outer;
}
}
CurCellIndex = CellCount;//当本行中当前列之前的列中没有找到所需的单元格,则下上行从最后一列处开始
}
if (TargateRow == -1 ¦ ¦ TargateCell == -1)
{
return false;
}
if (tblGrid.rows[TargateRow].cells[TargateCell].children[0].value != '')
{
var cPos = getCaretPos(tblGrid.rows[TargateRow].cells[TargateCell].children[0],'left');
if (cPos)
{
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
else
{
return false;
}
}
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
//END****************************************************************************
//向右光标(当前列为最后一列时,则转向下一行的第一列)******************************
if ((event.keyCode == 39 ¦ ¦ event.keyCode == 13 )) //right(按回车也向右移,回车等同于向右光标键)
{
Outer:
for (R=CurRowIndex; R < rowcount ;R++)
{
for (C=CurCellIndex+1;C <CellCount;C++ )
{
if (tblGrid.rows[R].cells[C].children[0] != null && tblGrid.rows[R].cells[C].children[0].type == 'text')
{
TargateRow=R;
TargateCell=C;
break Outer;
}
}
CurCellIndex=-1;//当本行中当前列之后的列中没有找到所需的单元格,则下一行从第0列处开始
}
if (TargateRow == -1 ¦ ¦ TargateCell == -1)
{
return false;
}
if (tblGrid.rows[TargateRow].cells[TargateCell].children[0].value != '')
{
var cPosR =getCaretPos(tblGrid.rows[TargateRow].cells[TargateCell].children[0],'right');
if (cPosR)
{
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
else
{
return false;
}
}
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
//END****************************************************************************
}
}
}
}
///本函数
afce
是在keypressed2上扩展得来.对keypressed2进行优化及按目前需求增加相应功能
///ZLJ 2007-11-05-22:00
/// 在datagrid里,跟据所按下的方向键,对当前光标位置做相对应的跳转
///缺陷:目前只能对Datagrid中的textbox模板列进行控制.
若为最后一列时,则光标转向下一行的第一列,若为最后一行的最后一列则按向右光标键不做反应。
若为第一列时,按向左则光标转向上一行的最后一列。
若为最后一行时,按向下光标则新增一行
若为第一行时,按向上光标则不做反应。
若下一个目的地只是单纯的表格,没有子控件(textbox),则继续寻找下一个单元格,直到找到适合的单元格为止
*/
function keyPressed(TB)
{
var tblGrid = document.getElementById("DataGrid1");
var TBID = document.getElementById(TB);//当前ID
var CurCellID=TBID.parentElement;//当前TD
var CurCellIndex=CurCellID.cellIndex;//当前是第几列
var CurRowIndex= CurCellID.parentElement.rowIndex;//当前是第行;
var rowcount = tblGrid.rows.length; //总行
var CellCount =tblGrid.rows[CurRowIndex].cells.length;//当前行的总列数
var TargateRow=-1 ;//目标行(默认值为-1)
var TargateCell=-1 ;//目标列 (默认值为-1)
var R,C;
if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40|| event.keyCode == 13)
{
if (tblGrid.rows[CurRowIndex].cells[CurCellIndex].children[0] != null)
{
if (tblGrid.rows[CurRowIndex].cells[CurCellIndex].children[0].id == TBID.id)
{
//向下光标****************************************************************************
if (event.keyCode == 40 )//Buttom
{
if (CurRowIndex <rowcount-1)
{
if (tblGrid.rows[CurRowIndex + 1].cells[ CurCellIndex].children[0] != null)
{
if (tblGrid.rows[CurRowIndex + 1].cells[ CurCellIndex].children[0].type == 'text')
{
//downvalue
tblGrid.rows[CurRowIndex + 1].cells[CurCellIndex].children[0].focus();
return false;
}
}
}
else
{
//当在最后一行按向下光标键时,新增一行空白行
}
}
//END****************************************************************************
//向上光标(当前行必须大于第一行)******************************************************
if (event.keyCode == 38 && CurRowIndex > 1 )//up
{
if (tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0] != null)
{
if (tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0].type == 'text')
{
//upvalue
tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0].focus();
return false;
}
}
}
//END****************************************************************************
//向左光标(当前列为第0列时则转向上一行的最后一列)*******************************
if (event.keyCode == 37 )//left
{
Outer:
for (R=CurRowIndex; R > 0 ;R--)
{
for (C=CurCellIndex-1;C> =0;C-- )
{
if (tblGrid.rows[R].cells[C].children[0] != null && tblGrid.rows[R].cells[C].children[0].type == 'text')
{
TargateRow=R;
TargateCell=C;
break Outer;
}
}
CurCellIndex = CellCount;//当本行中当前列之前的列中没有找到所需的单元格,则下上行从最后一列处开始
}
if (TargateRow == -1 ¦ ¦ TargateCell == -1)
{
return false;
}
if (tblGrid.rows[TargateRow].cells[TargateCell].children[0].value != '')
{
var cPos = getCaretPos(tblGrid.rows[TargateRow].cells[TargateCell].children[0],'left');
if (cPos)
{
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
else
{
return false;
}
}
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
//END****************************************************************************
//向右光标(当前列为最后一列时,则转向下一行的第一列)******************************
if ((event.keyCode == 39 ¦ ¦ event.keyCode == 13 )) //right(按回车也向右移,回车等同于向右光标键)
{
Outer:
for (R=CurRowIndex; R < rowcount ;R++)
{
for (C=CurCellIndex+1;C <CellCount;C++ )
{
if (tblGrid.rows[R].cells[C].children[0] != null && tblGrid.rows[R].cells[C].children[0].type == 'text')
{
TargateRow=R;
TargateCell=C;
break Outer;
}
}
CurCellIndex=-1;//当本行中当前列之后的列中没有找到所需的单元格,则下一行从第0列处开始
}
if (TargateRow == -1 ¦ ¦ TargateCell == -1)
{
return false;
}
if (tblGrid.rows[TargateRow].cells[TargateCell].children[0].value != '')
{
var cPosR =getCaretPos(tblGrid.rows[TargateRow].cells[TargateCell].children[0],'right');
if (cPosR)
{
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
else
{
return false;
}
}
tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
return false;
}
//END****************************************************************************
}
}
}
}
相关文章推荐
- Flex 如何实现按钮之间的切换,按钮点击事件
- 在GridView里面添加CheckBox,如何实现哪一行被选中
- 点击一个按钮实现在不同对话框之间的切换,帮忙看下这代码能不能这样写,为什么不对呀
- 如何使用GridView实现不同数量显示图片不同的大小
- 如何实现点击一个下拉菜单的选项就弹出不同的输入框或者下拉菜单
- 在GridView里面添加CheckBox,如何实现哪一行被选中
- 如何实现不同数据存储模式之间的数据转换
- vue中如何实现样式之间的切换
- 在SQL Server 中,如何实现DBF文件和SQL Server表之间的导入或者导出?
- RecyclerView实现listview+GridView之间切换的小demo
- 100分!!!如何实现两个不同手机不同APP之间的实时的数据传递
- 如何实现低级ui之间的切换
- Linux下如何实现不同网段之间的访问
- qt android开发篇之如何实现在不同分辨率手机中自适应字体大小,或者像素什么的
- vb2005中如何实现敲回车切换焦点的功能
- 【iOS开发-24】导航控制器下不同视图控制器之间切换:利用CATrasition和view的layer层来实现自定义的动画效果
- 如何实现3G/4G与Wi-Fi网络之间稳定且无缝地切换
- expdp/impdp如何实现不同用户之间的导出导入
- asp.net如何实现不同页面之间的属性值传递
- 如何实现Activity之间的切换动画(一)