aspnet中Gridview如何实现敲回车进入下一行?或者用方向键在不同的行之间切换?
asp.net中,输入完一行的数据后想切换到下一行,只能使用TAB键,如何使用方向键进行行与行之间的切换?或者敲回车直接进入下一行?
[解决办法]
<input onkeydown= "if(event.keyCode==13)event.keyCode=9 ">
[解决办法]
sendkey
[解决办法]
你的文本框是怎样放在GridView里的?
[解决办法]
下面这个是在 datagrid里的,gridview里应该差不多吧。。。
<HTML>
<HEAD>
<title>WebForm2</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<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;
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****************************************************************************
}
}
}
}
[解决办法]
下面这个是在 datagrid里的,gridview里应该差不多吧。。。
<HTML>
<HEAD>
<title>WebForm2</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<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;
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****************************************************************************
}
}
}
}
[解决办法]
function getCaretPos(control,way){
var movement;
if (way == 'left'){
movement = -1;
}
else{
movement = 1;
}
if (control.createTextRange)
{
control.caretPos = document.selection.createRange().duplicate();
if (control.caretPos.move("character",movement) != '')
{
return false;
}
else
{
return true;
}
}
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" style="LEFT: 16px; POSITION: absolute; TOP: 184px; Z-CurRowIndex: 101"
runat="server" Width="632px" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox onkeyup=keyPressed(this.id) Text='<%# DataBinder.Eval(Container,
"DataItem.RealName") %>' Runat=server ID=test>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="mobileNumber" HeaderText="文本"></asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox onkeyup=keyPressed(this.id) Text='<%# DataBinder.Eval(Container,
"DataItem.LoginName") %>' Runat=server ID="Textbox3">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="URL">
<ItemTemplate>
<asp:LinkButton id="LinkButton1" runat="server">LinkButton</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid></form>
</body>
</HTML>
你改改就差不多了,应该,这个是回车右移