繁体   English   中英

只有在以下情况下,EditItemTemplate内部的控件才可以在Page_Load()中使用:

[英]Control inside EditItemTemplate will be available in Page_Load() only if


在我的页面上,我定义了控件TextBox1,Label1和GridView1。 在GridView1内部,我定义了以下模板:

           <asp:TemplateField>

              <ItemTemplate>
                <asp:LinkButton runat="server" Text="Edit" CommandName="Edit" ID="cmdEdit" />         
              </ItemTemplate>

              <EditItemTemplate>
                <asp:TextBox Text='<%# Bind("Notes") %>' runat="server" id="textBoxNotes" />
                <br /><br />
                <asp:LinkButton runat="server" Text="Update" 
                 CommandName="Update" ID="cmdUpdate" /> 
                <asp:LinkButton runat="server" Text="Cancel" 
                 CommandName="Cancel" ID="cmdCancel" />
              </EditItemTemplate>

            </asp:TemplateField>

如果用户在textBoxNotes中输入文本并单击cmdUpdate按钮,则在回发时,当调用Page_Load()时,此文本将已可用。


因此,如果用户在单击更新按钮cmdUpdate之前还向TextBox1输入了字符串“ something”,则以下代码将提取用户输入到textBoxNotes中的文本

    protected void Page_Load(object sender, EventArgs e)
    {
        if(TextBox1.Text=="text from Notes")
        Label1.Text =((TextBox)gridEmployees.Rows[0].Cells[0].FindControl("textBoxNotes")).Text;
    }


A)以下代码也应该提取输入到textBoxNotes中的文本用户,但是当我单击cmdEdit按钮时,我得到“对象引用未设置为对象的实例。”异常

    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)
        Label1.Text =((TextBox)gridEmployees.Rows[0].Cells[0].FindControl("textBoxNotes")).Text;
    }

为什么会出现此异常? 似乎textBoxNotes不存在。 但是为什么不存在呢?


谢谢

您在Page_Load中引用的方式是在gridview的行实际存在之前发生的。 因为它发生在PostBack上,所以必须从ViewState重新创建GridView(和触发事件)(re:填充其行)。 初始化页面上的对象并填充其值后,尚未重新创建GridView且未触发其事件。

如博士所说,这应该在RowUpdating事件中完成。

发生Update事件时,该行不再处于编辑模式。 因此,textBoxNotes在页面上不存在。 使用gridview的RowUpdating事件处理程序访问编辑模板控件。

public void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
     TextBox1.Text = ((TextBox)GridView1.Rows[e.RowIndex]
                              .FindControl("textBoxNotes")).Text;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM