专注于gridview和updatepanel内的文本框

时间:2014-03-05 15:20:31

标签: asp.net gridview asp.net-ajax updatepanel scriptmanager

在我看到一些看似简单的东西之后,我在这里:

我在GridView内包含了一个ASP.NET 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的实例,该实例位于主页面上。

有什么想法吗?

2 个答案:

答案 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>