GridView中的文本框不关注页面加载

时间:2017-11-13 21:50:43

标签: c# asp.net gridview

我在页面中有一个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仍然可以完成这项工作,但我正试图找到一种方法来通过后端代码来实现这一点。

0 个答案:

没有答案