首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在网格视图中读取动态创建的文本框

在网格视图中读取动态创建的文本框
EN

Stack Overflow用户
提问于 2011-05-10 04:21:44
回答 2查看 5.4K关注 0票数 1

我正在动态地将一个文本框添加到网格视图的某些行(只有一列)。我使用这个内部测试条件添加控件(工作正常):

代码语言:javascript
运行
复制
        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 (我确信在该文本框中输入了一个值):

代码语言:javascript
运行
复制
    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的计数,但当我执行后续的按钮单击时则不会。

有人能解释这个吗?我觉得如果我能克服这个障碍,我就能完成剩下的事情。

再次感谢。

EN

回答 2

Stack Overflow用户

发布于 2011-05-10 04:24:16

您需要为TextBox控件分配一个ID,然后在FindControl()中通过该ID访问它们。此外,请确保将控件添加到生命周期的Page的Init()方法中。这样它就会被添加到ViewState中。

代码语言:javascript
运行
复制
TextBox txt1 = new TextBox();
txt1.ID = "txt1"; 
e.Row.Cells[4].Controls.Add(txt1);

编辑:我刚刚想起了另一个可能的解决方案。无需在代码隐藏中以编程方式创建TextBox控件,只需在GridView中创建一个TemplateField即可。

Add Textbox TemplateField Column To GridView Programmatically

票数 2
EN

Stack Overflow用户

发布于 2011-05-10 04:42:08

我会尝试一种不同的方法,将文本框放在页面的html标记中,然后在ItemDataBound事件上控制它的visible或readonly属性。这样,控件就会一直存在,你就不必担心生命周期的问题了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5942051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档