如何从C#中的动态创建的下拉列表创建动态文本框

Pramod Niralakeri

我要创建动态文本框的数量(在下拉列表中选择的值,范围从1到5)

注意:下拉列表列表也是动态创建的控件

这里的示例代码:

    Table table=new Table();

    for (int i = 1; i <= 5; i++)
    {
        TableRow row = new TableRow();
        TableCell cell = new TableCell();

        DropDownList drp_splzn = new DropDownList();

        drp_splzn.ID = i.ToString();
        drp_splzn.Items.Add("-SELECT SPECIALIZATION-");
        drp_splzn.Items.Add(new ListItem("1", "1"));
        drp_splzn.Items.Add(new ListItem("2", "2"));
        drp_splzn.Items.Add(new ListItem("3", "3"));
        drp_splzn.Items.Add(new ListItem("4", "4"));
        drp_splzn.Items.Add(new ListItem("5", "5"));


        cell.Controls.Add(drp_splzn);

        row.Cells.Add(cell);
        table.Rows.Add(row);
    }

我希望先创建文本框,然后再添加受尊重的下拉列表...我知道可以使用回发和下拉列表更改事件...但是我无法弄清楚

阿兰洛波

这是解决最终问题的方法。

下图是说明(您可以更改文本框的内容,并且新值将在回发之间保留):

许多选择

现在,我们面临着保持已经显示的文本框 displayed以及保持它们所保存的值的需求。Ť他关键在做,这是使用ViewState的对象。我们将通过在希望其状态保持不变的每个控件上启用它来做到这一点。另一方面,ASP .NET的引擎不会为我们重新创建控件,但是当控件可用时,它将对它们使用ViewState机制。

因此,首先让我们创建一个Dictionary对象。我们将使用它来保存两个信息。第一个是used下拉列表,第二个是selected value on that dropdownlist我们将其创建为静态变量,就像我们执行布尔hasDropDowns一样

public partial class WebForm1 : System.Web.UI.Page
{
    static bool hasDropDowns = false;
    static Dictionary<int, int> textBoxesStateDictionnary = new Dictionary<int, int>();

...

我们将使用下拉列表的ID作为键,并将该下拉列表中的选定值用作关联值。

然后,我们需要更改选择索引已更改的事件处理程序。选择一个值并创建文本框后,我们需要在字典中添加一个新条目。这是selectindex更改事件处理程序的新版本

 void drp_splzn_SelectedIndexChanged(object sender, EventArgs e)
    {

        DropDownList chosenDropDown = (DropDownList)sender;

        Int32 pickedValue = Int32.Parse(chosenDropDown.SelectedValue);

        Table table = // new Table();
         (Table)Page.Form.FindControl("table" + chosenDropDown.ID);

        for (int i = 0; i < pickedValue; i++)
        {

            TableRow row = new TableRow();
            TableCell cell = new TableCell();
            cell.Attributes.Add("runat", "server");

            TextBox txt_splzn = new TextBox();

            txt_splzn.ID = "txtB_" + chosenDropDown.ID + "_" + i.ToString();
            txt_splzn.Text = "Text Number " + i.ToString();
            txt_splzn.EnableViewState = true;

            cell.Controls.Add(txt_splzn);

            row.Cells.Add(cell);
            table.Rows.Add(row);

        }

        textBoxesStateDictionnary.Add(Int32.Parse(chosenDropDown.ID), Int32.Parse(chosenDropDown.SelectedValue));

    }

正如您在代码的最后一行中看到的那样,键是所选下拉列表的ID和对应的值(即所选值)。

此外,由于先前的ID由乱扔垃圾和选定的值组成,因此我们还必须更改文本框ID。如果我们保持不变,则Page.Form.FindControl方法将引发异常:ID将是唯一的。

现在我们需要影响Page_Load事件处理程序。在我们重新创建一个下拉列表之后,我们立即查看字典以查看是否存在相应的条目(使用其ID)。如果存在,我们将重新创建字典条目中相应值所指示的文本框然后,我们信任ViewState来执行此操作,因为创建文本框时,我们激活了ViewState(请参阅参考资料txt_splzn.EnableViewState = true;

这是Page_Load事件处理程序的代码

 protected void Page_Load(object sender, EventArgs e)
    {

        if (Page.IsPostBack)
        {
            if (!hasDropDowns)
            {
                return;
            }

            Table table = new Table();

            for (int i = 1; i <= 5; i++)
            {
                TableRow row = new TableRow();
                TableCell cell = new TableCell();
                cell.Attributes.Add("runat", "server");

                DropDownList drp_splzn = new DropDownList();

                drp_splzn.ID = i.ToString();
                drp_splzn.Items.Add("-SELECT SPECIALIZATION-");
                drp_splzn.Items.Add(new ListItem("1", "1"));
                drp_splzn.Items.Add(new ListItem("2", "2"));
                drp_splzn.Items.Add(new ListItem("3", "3"));
                drp_splzn.Items.Add(new ListItem("4", "4"));
                drp_splzn.Items.Add(new ListItem("5", "5"));

                drp_splzn.SelectedIndexChanged += drp_splzn_SelectedIndexChanged;
                drp_splzn.AutoPostBack = true;
                drp_splzn.EnableViewState = true;


                cell.Controls.Add(drp_splzn);

                row.Cells.Add(cell);
                table.Rows.Add(row);

                TableRow rowT = new TableRow();
                TableCell cellT = new TableCell();
                cellT.Attributes.Add("runat", "server");

                Table table2 = new Table();

                table2.ID = "table" + i.ToString();


                int retrievedValue = -1;
                if (textBoxesStateDictionnary.TryGetValue(i, out retrievedValue))
                {
                    for (int j = 0; j < retrievedValue; j++)
                    {
                        // Recreate them
                        TableRow rowTT = new TableRow();
                        TableCell cellTT = new TableCell();
                        cellTT.Attributes.Add("runat", "server");

                        TextBox txt_splzn = new TextBox();

                        txt_splzn.ID = "txtB_" + i +"_" + j.ToString();

                        txt_splzn.EnableViewState = true;

                        cellTT.Controls.Add(txt_splzn);
                        rowTT.Controls.Add(cellTT);
                        table2.Controls.Add(rowTT);

                    }

               }

                cellT.Controls.Add(table2);

                rowT.Cells.Add(cellT);
                table.Rows.Add(rowT);
            }

            this.Controls.Add(table);

            Page.Form.Controls.Add(table);

        }
        else
        {

        }

    }

就是这样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在选择下拉列表时动态创建文本框

来自分类Dev

在Java中动态创建文本框,下拉列表和其他控件

来自分类Dev

如何创建动态文本框

来自分类Dev

如何在动态创建的行中使用下拉列表中最接近文本框设置值的值

来自分类Dev

如何在动态创建的行中使用下拉列表中最接近文本框设置值的值

来自分类Dev

如何在C#中制作动态文本框

来自分类Dev

如何在C#asp.net中动态创建文本框?

来自分类Dev

如何获取动态创建的文本框的文本值

来自分类Dev

如何获取动态创建的文本框的文本值

来自分类Dev

在表中动态创建的文本框丢失了文本值

来自分类Dev

如何获取jQuery中动态创建的文本框的动态ID

来自分类Dev

无法专注于C#中动态创建的列表框

来自分类Dev

从PHP中动态创建的文本框中检索值?

来自分类Dev

在 C# 中的 win 表单上动态显示在另一个类中创建的文本框

来自分类Dev

如何保存动态创建的文本框及其值

来自分类Dev

如何从JavaScript动态创建文本框

来自分类Dev

如何找到动态创建的文本框的位置?

来自分类Dev

如何通过jquery函数命名动态创建的文本框?

来自分类Dev

保存动态创建的文本框的值

来自分类Dev

获取动态创建的文本框的价值

来自分类Dev

动态创建输入文本框

来自分类Dev

样式化动态创建的文本框

来自分类Dev

动态创建的文本框的警报值

来自分类Dev

获取动态创建的文本框的值

来自分类Dev

VBA-在动态创建的文本框中捕获事件

来自分类Dev

jQuery在动态创建的文本框中检测Enter键

来自分类Dev

动态创建的文本框中的值求和

来自分类Dev

动态创建的文本框中的值求和

来自分类Dev

在引导模式中创建动态文本框

Related 相关文章

热门标签

归档