日期:2014-05-18  浏览次数:20466 次

VS2003中的Datagrid,如何响应键盘方向键?
后台.cs中动态生成了datagrid   ,并且是可输入的文本框,要怎样像一般的表格一样实现用键盘方向键对表格进行操作?

------解决方案--------------------
呵呵,刚好前几天做了一个这样的功能,
唉,这会项目又打算用cs来实现,我这不是白忙活了么-_-



<script language="javascript">
/*
///本函数是在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;