在我看到一些看似简单的东西之后,我在这里:
我在GridView
内包含了一个ASP.NET UpdatePanel
。一旦用户在最后一行的最后一个文本框中输入内容并移出,我就会向gridview添加一个新行。这是通过触发文本框的OnTextChanged
事件并将其AutoPostBack
属性设置为true来在服务器端完成的。使用UpdatePanel
。
我的简单要求是:我需要在部分刷新结束后将焦点设置在新添加的行的第一个文本框。
我尝试了什么:
//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 :(得分: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>
答案 1 :(得分:0)
您可以使用javascript pageLoad函数,这是每次刷新ajax更新面板的内容时触发的Ajax特定函数。在该功能内部触发“焦点”在文本框上。
function pageLoad() {
document.getElementById('ClientIdOfYourTextBox').focus(); }
您需要在javascript中获取新添加的文本框的ClientId。您可以通过在添加后将其保存在隐藏字段服务器端来实现它,然后通过构建jquery表达式获取隐藏字段的'value'或者通过构建jquery表达式(例如,从包含'txtMyCode'的id的所有'input'控件中获取最后一个)< / p>