【问题标题】:Textbox array textchanged doesn't fire properly文本框数组 textchanged 无法正确触发
【发布时间】:2013-02-26 19:41:08
【问题描述】:

在我的代码中,我需要创建一些 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 设计器上有一个脚本管理器。 是什么导致了这个问题?

使用谷歌浏览器,我可以使用 ENTER 并且它会一直工作。 但是在 Internet Explorer 中输入不起作用。

注意:我在这里发送的代码只是一个副本,而不是真正的代码。 这是由于我的实习政策。

如果您需要有关代码的更多信息,请随意询问,请尽量详细说明。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 如果你的意思是我需要清除文本框的公共静态,这已经被我捆绑了。比我遇到的其他网页不想再一起工作的问题还要多。因为我对所有数据库 qeury 使用不同的 cs。还有使用静态方法的非静态变量的错误。没有像LostFocus这样的方法吗?
    • 我之前尝试过在文本中填写信息 Empty is there and after the textchanged is not fire (第二次更改文本框)标签更改为不可用如果有他会说什么不是数据库中的结果。但是通过调试它告诉我它没有触发 textchanged
    【解决方案2】:

    我解决了这个问题,显然问题是没有 ID

    所以我添加了信息[i].ID = "信息" + i; 这解决了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      相关资源
      最近更新 更多