文本框数组textchanged无法正确触发

时间:2013-02-26 19:41:09

标签: c# asp.net arrays visual-studio-2010 text

在我的代码中,我需要制作一些textboxes[]来获取数据库中的一些信息,但是它的工作量为50%

    public static Table tableinfo = new Table();
    public static TableRow rowinfo = new TableRow();
    public static TextBox[] information = new TextBox[1000];
    public static Label[] information1 = new Label[1000];
    public static Label[] information2 = new Label[1000];
    public static Label[] information3 = new Label[1000];
    public static Label[] information4 = new Label[1000];
    public static string[] gettext = new string[1000];
    public static int textboxes;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            textboxes = 1;
            for (int i = 0; i < 1000; i++)
            {
                Array.Clear(gettext, 0, gettext.Length);
                Array.Clear(information, 0, information.Length);
            }
        }
        else
        {

        }
        tableinfo.Controls.Clear();
        tableinfo.BorderWidth = 1;
        addtextboxes();
        placeholder1.Controls.Add(tableinfo);
        makeandfilltextboxes();
    }

    public static void makeandfilltextboxes()
    {
        for (int i = 0; i < textboxes; i++)
        {
            gettext[i] = "";
        }
        for (int i = 0; i < textboxes; i++)
        {
            gettext[i] = information[i].Text;
            //go to database and fetch information
            information1[i].text = databaseinformation1[i];
            information2[i].text = databaseinformation2[i];
            information3[i].text = databaseinformation3[i];
            information4[i].text = databaseinformation4[i];
        }
    }

    static void TestForm_TextChanged(object sender, EventArgs e)
    {
        makeandfilltextboxes();
        tableinfo.Controls.Clear();
        tableinfo.BorderWidth = 1;
        textboxes++;
        addtextboxes();
    }
    public static void addtextboxes()
    {
        for (int i = 0; i < textboxes; i++)
        {
            rowinfo = new TableRow();
            TableCell cellinfo = new TableCell();
            information[i] = new TextBox();
            information[i].AutoPostBack = true;
            information[i].CausesValidation = false;
            information[i].EnableViewState = true;
            information[i].Text = gettext[i];
            information[i].TextChanged += new EventHandler(TestForm_TextChanged);
            rowinfo.Cells.Add(cellinfo);
            cellinfo.Controls.Add(information[i]);
            tableinfo.Controls.Add(rowinfo);

            TableCell cellinfo1 = new TableCell();
            information1[i] = new Label();
            information1[i].EnableViewState = true;
            information1[i].Text = databaseinformation1[i];
            rowinfo.Cells.Add(cellinfo1);
            cellinfo.Controls.Add(information1[i]);
            tableinfo.Controls.Add(rowinfo);

            TableCell cellinfo2 = new TableCell();
            information2[i] = new Label();
            information2[i].EnableViewState = true;
            information2[i].Text = databaseinformation2[i];
            rowinfo.Cells.Add(cellinfo2);
            cellinfo.Controls.Add(information2[i]);
            tableinfo.Controls.Add(rowinfo);

            TableCell cellinfo3 = new TableCell();
            information3[i] = new Label();
            information3[i].EnableViewState = true;
            information3[i].Text = datbaseinformation3[i];
            rowinfo.Cells.Add(cellinfo3);
            cellinfo.Controls.Add(information3[i]);
            tableinfo.Controls.Add(rowinfo);

            TableCell cellinfo4 = new TableCell();
            information4[i] = new Label();
            information4[i].EnableViewState = true;
            information4[i].Text = databaseinformation4[i];
            rowinfo.Cells.Add(cellinfo4);
            cellinfo.Controls.Add(information4[i]);
            tableinfo.Controls.Add(rowinfo);
        }
    }

所以你可以看到,我用你在信息中填写的值来填充数组[i] 如果我能找到一些东西,我在那里寻找数据库。 这一切都很完美。 唯一的问题是以奇怪的方式调用information[i].TextChanged += new EventHandler(TestForm_TextChanged);

第一次输入文本框时会触发 第二次它没有被解雇 它第三次发射 第四次它没有被解雇 等等

如果我每次都能解决TestForm_TextChanged,问题就会解决。

我也有一些复选框,他们正在使用checkedchanged的事件处理程序,他们正在显示有关检查的手上的信息是否会导致一些问题 我正在更新面板上工作,并在我的aspx desinger上有一个scriptmanager。 是什么导致了这个问题?

使用Google Chrome我可以使用ENTER,它会一直有效。 但是输入在Internet Explorer中不起作用。

注意:我在这里发送的代码只是一个REPLICA而不是真正的代码。 这是因为我的实习政策。

如果您需要有关代码的更多信息,可以随意提出,尽量详细说明。

2 个答案:

答案 0 :(得分:0)

我认为问题在于您的所有文本框和标签都是静态的。让它们成为Page实例的一部分。

答案 1 :(得分:0)

我明确解决了问题,问题是没有Id

所以我添加了信息[i] .ID =“information”+ i; 并修复了问题