我如何访问动态创建的文本框?

时间:2014-10-31 18:47:12

标签: c# asp.net gridview findcontrol

当我动态创建gridview中的无限文本框时,如何访问它们? 例如:

    int uste_uzaklik = 30;
    int nesne = ListBox1.Items.Count;
    Array.Resize(ref textboxarray, nesne * nesne);
    for (int str = 0; str < nesne; str++)
    {
        for (int stn = 0; stn < nesne; stn++)
        {
            textboxarray[idm] = new TextBox();
            textboxarray[idm].Font.Bold = true;
            textboxarray[idm].Font.Name = "Verdana";
            textboxarray[idm].ID = idm.ToString();
            textboxarray[idm].ToolTip = textboxarray[idm].ID;
            GridView2.Rows[str].Cells[stn + 1].Controls.Add(textboxarray[idm]);
            if (str == stn) textboxarray[idm].Enabled = false;
            uste_uzaklik += 30;
            idm++;
        }
    }

我在gridview中添加texbox ...你可以想象一个matris ...... 没有问题... 但当我这样访问它们时:

                   if (((TextBox)(GridView2.Rows[str].Cells[stn].FindControl(idm.ToString()))).Text != null)
                    {
                        matris[i, j] = Convert.ToInt32(GridView2.Rows[str].Cells[stn].Text);
                    }

发生错误

Object reference not set to an instance of an object.

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您必须控制的引用不会停止存在,您将它们添加到另一个控件。您已经创建了一个TextBoxes数组,您应该使用它来访问它们,而不是试图深入了解您每次想要更改它们时添加它们的GridView。

当然,你是从一个TextBoxes的一维数组转到GridView中的二维布局,所以你要么必须找到一些方法来确定两者之间的索引是如何匹配的。或者,更简单地说,您可以将textboxarray转换为二维数组,并使其与GridView中的布局完全匹配。无论哪种方式,我认为这比在GridView中捣乱要少得多。