2014-03-05 38 views
2

文本框打破我的头在一些看似简单的后,我在这里:专注于内部GridView和的UpdatePanel

我有一个ASP.NET GridView的包裹里面UpdatePanel。一旦用户在最后一行的最后一个文本框中输入了一些内容并移出,我就向gridview添加了一个新行。这通过触发文本框的OnTextChanged事件并将其AutoPostBack属性设置为true来完成服务器端。该位通过使用UpdatePanel进行了Ajax化。

我的简单要求是:一旦局部刷新超过,我需要将焦点设置在新添加的行的第一个文本框中。

我试了一下:

//Get the newly added row (basically the last row) 
GridViewRow newRow = myGridView.Rows[myGridView.Rows.Count - 1]; 
//Get the TextBox control on which I want to set focus 
TextBox textBox = newRow.FindControl("txtMyCode") as TextBox; 
//Set the focus 
ScriptManager.GetCurrent(this.Page).SetFocus(textBox); 

在单步调试代码,上述各行的执行,然而,部分回发完成时,文本框没有焦点。 ScriptManager.GetCurrent(this.Page)返回母版页上的AjaxControlToolkitScriptManager的实例。

任何想法?

+0

你是如何添加行以及何时何地的?尝试使用'RowDataBound'来代替。 –

回答

0

如果您无法从服务器站点设置焦点,则可以编写jQuery来实现此位。

<script type="text/javascript"> 


Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(BindEvents); 

function BindEvents() { 

    //write your logic here lets say 
     //if your grid view empty row is visible then set focus 


} 
</script> 
0

您可以使用javascript pageLoad函数,这是每次刷新ajax更新面板的内容时触发的Ajax特定函数。在那个函数里触发你的文本框。

function pageLoad() { 
document.getElementById('ClientIdOfYourTextBox').focus(); } 

您需要在javascript中获取新添加的文本框的ClientId。你可以通过在隐藏字段服务器端保存它,然后获得隐藏字段的'value'客户端或通过构建jQuery表达式(例如,从包含'txtMyCode'的id获得所有'输入'控件的最后一个')来实现它。