我正在动态地将一个文本框添加到网格视图的某些行(只有一列)。我使用这个内部测试条件添加控件(工作正常):
        TextBox txtASIN = new TextBox();
        txtASIN.ID = "TxtASIN" + e.Row.RowIndex;
        e.Row.Cells[4].Controls.Add(txtASIN);
        int i = e.Row.Cells[4].Controls.Count; //TEST: This returns 1 correctly我希望用户能够向这些文本框中的一个或多个输入值,然后通过单击一次按钮更新数据库(而不是每行一次单击)。我遇到的问题是如何在按钮单击事件上访问这些值。我用这种方式做了一个简单的测试,试图查看第二行中的值,但在temp1中得到null (我确信在该文本框中输入了一个值):
    protected void btnUpdate1_Click(object sender, EventArgs e)
    {
        TextBox temp = (TextBox)GridView2.Rows[1].FindControl("txt1");
        string temp1 = temp.Text;
        int i = GridView2.Row.Cells[4].Controls.Count; //TEST: This returns 0 incorrectly        }一旦我可以这样做,我就可以遍历各行,并对这些值做我需要做的事情。我不知道在文本框中输入的文本在没有回发的情况下是否真的是可读的,但除此之外,我被难住了。对于如何做到这一点,开放给出更好的建议。
谢谢。
编辑:这就是我现在的位置。我可以很好地看到列中的文本框。我在一个试图读取它们的按钮上放了一个断点,这就是我所看到的。如果我检查GridView2.Rows.Controls.Count,我得到8,这是正确的列数。如果我选中GridVeiw2.Rows.Cells4.Controls.Count,我会得到0,这是错误的,因为文本框就在那里。我可以在动态创建后立即获得1的计数,但当我执行后续的按钮单击时则不会。
有人能解释这个吗?我觉得如果我能克服这个障碍,我就能完成剩下的事情。
再次感谢。
发布于 2011-05-10 04:42:08
我会尝试一种不同的方法,将文本框放在页面的html标记中,然后在ItemDataBound事件上控制它的visible或readonly属性。这样,控件就会一直存在,你就不必担心生命周期的问题了。
https://stackoverflow.com/questions/5942051
复制相似问题