我在页面中有一个GridView,它包含一个TextBox,我想设置焦点。此GridView包含在UpdatePanel中。问题是TextBox只能从post back控件事件中设置焦点,而不能从Page Load设置焦点。 代码如下所示:
ASPX:
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server" ChildrenAsTriggers="true">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnUpdate" />
</Triggers>
<asp:GridView ID="Grid" runat="server" AutoGenerateColumns="False">
...
<asp:TemplateField HeaderText="Date">
<ItemTemplate>
<asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</asp:UpdatePanel>
aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ShowGrid(); //This does not set focus
}
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
ShowGrid(); //This works OK
}
private void ShowGrid()
{
Grid.DataSource = _datatable;
Grid.DataBind();
GridViewRowEventArgs e = new GridViewRowEventArgs(Grid.Rows[0]);
TextBox txtDate = (TextBox)e.Row.FindControl("txtDate");
if (txtDate != null) //when debugging txtDate is not null from Page Load
Page.SetFocus(txtDate);
}
我已尝试this post中的所有解决方案,但它们都没有适用于我的方案。是否与页面事件序列有关?
我想在DOM准备好之后的几行JavaScript / jQuery仍然可以完成这项工作,但我正试图找到一种方法来通过后端代码来实现这一点。