【问题标题】:how can i access a textbox which create dynamically?如何访问动态创建的文本框?
【发布时间】:2014-10-31 18:47:11
【问题描述】:

当我在 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 中添加了 texboxes...你可以想象一个矩阵... 没有问题... 但是当我像这样访问它们时:

                   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.

我该如何解决这个问题?

【问题讨论】:

  • 你为什么不使用 textboxarray 来访问文本框?你创建了数组,为什么不继续引用呢?
  • 什么是idm??? idm的初始值和最后值是什么???
  • 使用string.isnullorempty来检查,如果你有空字符串,并且你像!= null那样做一个空检查,它会通过,但是那个时候Convert.ToInt32("")会说Object reference not set to an instance of an object.

标签: c# asp.net gridview findcontrol


【解决方案1】:

您必须对控件的引用不会不复存在,您可以将它们添加到另一个控件。您已经创建了一个 TextBox 数组,您应该使用它来访问它们,而不是每次想要更改它们时都尝试深入到您添加它们的 GridView 中。

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

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多