在
ASP.NET
应用程序中
,
使用了
NetAdvantage
的
UltraWebGrid
控件
,
使用时发现在
Cell
中按一下回车后不能自动转到下一单元格
,
必须连按三下回车后,才能转到下一单元格,本文介绍一下出现此现象的原因及处理方法。
经过仔细研究,发现产生这个问题的原因是使用了
UltraWebGrid1_UpdateCell
服务器端事件,因此当
Cell
中数据发生变化时,总会
Postback
到服务器端,等传回后重新刷了页面后,焦点仍然在原单元格上。
解决此问题有两个方法:
(
1
)
(1)
在
UltraWebGrid1_UpdateCell
服务器端事件中增加重新定位到下一单元格的代码
//
焦点定位到下一单元格
if (e.Cell.Column.Index < UltraWebGrid1.Columns.Count - 1)
{
UltraWebGrid1.Rows[e.Cell.Row.Index].Cells[e.Cell.Column.Index + 1].Activate();
}
(
2
)
(2)
将能在客户端完成的计算在
javascript
中完成计算,不使用
UltraWebGrid1_UpdateCell
服务器端事件,如利用客户端的
AfterCellUpdateHandler
事件触发计算
首先在
javascript
中定义以下函数:
function
AfterCellUpdateHandler(tableName, itemName)
{
var oCol = igtbl_getColumnById(itemName);
if(oCol.Key=="Qty" || oCol.Key=="Price")
{
//
计算
}
}
在UltraWebGrid1的ClientSideEvents下的AfterCellUpdateHandler属性中输入 “AfterCellUpdateHandler”,则当Cell值发生变化时,将调用上面的函数,属性设置如下图:
(3)如某些单元格必须使用UpdateCell服务器端事件,此时也可以在ClientSideEvents的AfterCellUpdateHandler事件处理中取消某些不必要的postback,代码如下:
function AfterCellUpdateHandler(tableName, itemName)
{
var oCol = igtbl_getColumnById(itemName);
//如果不是ITEM列,则取消PostBack
if(oCol.Key!="item")
{
igtbl_cancelPostBack(tableName);
}
}
总之,减少postback,对提高WEB应用程序的性能大有裨益。