Anuj@12 Ответов: 1

Получите динамическое значение выпадающего списка.


Я написал код для динамического создания таблицы. Таблица содержит текстовое поле и раскрывающийся список. Я пытаюсь создать таблицу на основе выбранного значения выпадающего списка, когда я выбираю выпадающий список типа "Splitter1:5", чем строка таблицы будет создавать 5 . Первый раз это удалось сделать успешно, когда я попробовал второй раз, я не получил значение выпадающего списка. я делюсь своим кодом, пожалуйста, помогите мне.

Что я уже пробовал:

aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testform.aspx.cs" Inherits="testform" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="ddlTextBoxes" runat="server">
                <asp:ListItem Value="2" Text="Splitter1:2" />
                <asp:ListItem Value="4" Text="Splitter1:4" />
                <asp:ListItem Value="8" Text="Splitter1:8" />
                <asp:ListItem Value="1" Text="Joint" />
                <asp:ListItem Value="0" Text="OLT" />
            </asp:DropDownList>
            <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" /><br />
            <asp:Panel ID="container" runat="server" Visible="false"> <asp:Button ID="btnSubmit" runat="server" Text="Process" OnClick="Submit" /></asp:Panel>
           
               
           
        </div>
    </form>
</body>
</html>







using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class testform : System.Web.UI.Page
{
    DropDownList DDL; int i;
    ArrayList arry_value = new ArrayList(); object[] obj;
    Panel pn;

    protected void Page_Load(object sender, EventArgs e)
    {
        //ViewState["droplist"] = obj;
    }



    protected void btnAdd_Click(object sender, EventArgs e)
    {
        int numOfTxt = Convert.ToInt32(ddlTextBoxes.SelectedItem.Value);
        //  DataTable dt = new DataTable();
        //dt.Columns.Add("First Textbox");
        //  dt.Columns.Add("Dropdownlist");
        //  dt.Columns.Add("Last Textbox");
        var table = new Table();

        for (i = 0; i < numOfTxt; i++)
        {
            var row = new TableRow();
            var cell = new TableCell();

            // var thr = new TableHeaderRow();
            // var heading = new TableHeaderCell();
            //TableHeaderCell thPNumber = new TableHeaderCell();

            // cell.Attributes.Add("runat", "server");

            TextBox textbox = new TextBox();
            textbox.ID = "Textbox" + i;
            textbox.Text = "text" + i;

            textbox.Width = new Unit(180);

            TextBox textbox1 = new TextBox();
            textbox1.ID = "Textbox1" + i;
            textbox1.Text = "text1" + i;
            textbox1.Width = new Unit(180);

            DDL = new DropDownList();
            DDL.ID = "DDL1" + i;

            DDL.Items.Add("Select Splitter");
            DDL.Items.Add(new ListItem("Splitter1:2", "2"));
            DDL.Items.Add(new ListItem("Splitter1:4", "4"));
            DDL.Items.Add(new ListItem("Splitter1:8", "8"));
            DDL.Items.Add(new ListItem("Joint", "1"));
            DDL.Items.Add(new ListItem("ONT", "0"));
            DDL.AutoPostBack = true;
            DDL.SelectedIndexChanged += new System.EventHandler(DDL_SelectedIndexChanged);
         
            cell.Controls.Add(textbox1);
            cell.Controls.Add(DDL);
            cell.Controls.Add(textbox);
          
            row.Cells.Add(cell);
         

            table.Rows.Add(row);
            arry_value.Add(DDL.ID);
            foreach (object obj in arry_value)
            {
                var idcollection = new string[] { obj.ToString() };
            }
          
        }
        pn = new Panel();
        pn.ID = "pan" + i + 1;
        this.form1.Controls.Add(pn);
        container.Visible = true;

        Button btnSubmit = new Button();
        btnSubmit.ID = "btnSubmit";
        btnSubmit.Text = "Processone";
        btnSubmit.Click += new System.EventHandler(Submit);
        container.Controls.Add(table);
        //pn.Controls.Add(btnSubmit);
      //  container.Controls.AddAt(0, table);

    }

    protected void DDL_SelectedIndexChanged(object sender, EventArgs e)
    {
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Record Inserted Successfully')", true);
    }
    protected void Submit(object sender, EventArgs e)
    {
        //Student stud = (Student)ViewState["CurrentStudent"];
        //DropDownList ddl = (DropDownList)container.FindControl("DDL1"+i);
         int numOfTxt = 5;
        Label lb = new Label();
        //lb.Text = DDL.SelectedValue.ToString();
        //int numOfTxt = Convert.ToInt32(lb);
        string drpvalue;
        for (int j = 0; j < Convert.ToInt32(ddlTextBoxes.SelectedItem.Value); j++)
        {
            drpvalue = "DDL12" + i + ".SelectedItem.Value";
            //int te = Convert.ToInt32(drpvalue);
          //  numOfTxt += Convert.ToInt32(DDL120.SelectedItem.Value);
        }
        //int numOfTxt = Convert.ToInt32(ddlTextBoxes.SelectedItem.Value);
        var table = new Table();
        DataTable dt = new DataTable();
        for (int i = 0; i < numOfTxt; i++)
        {
            var row = new TableRow();
            var cell = new TableCell();
            // dt.Columns.Add("TextOne1");
            cell.Attributes.Add("runat", "server");

            TextBox textbox = new TextBox();
            textbox.ID = "Textbox" + i;
            textbox.Text = "text" + i;
            textbox.Width = new Unit(180);

            TextBox textbox1 = new TextBox();
            textbox1.ID = "Textbox1" + i;
            textbox1.Text = textbox1.Text;
            textbox1.Width = new Unit(180);

            DropDownList DDLs = new DropDownList();
            DDLs.ID = "DDL12" + i;
            //  count= Convert.ToInt32( DDL.ID = "DDL12" + i);
            DDLs.Items.Add("Select Splitter");
            DDLs.Items.Add(new ListItem("Splitter1:2", "2"));
            DDLs.Items.Add(new ListItem("Splitter1:4", "4"));
            DDLs.Items.Add(new ListItem("Splitter1:8", "8"));
            DDLs.Items.Add(new ListItem("Joint", "1"));
            DDLs.Items.Add(new ListItem("ONT", "0"));

            //DDLs.AutoPostBack = true;
           // DDLs.TextChanged += dropDown_TextChanged;

            //            dt.Rows.Add(textbox1);
            cell.Controls.Add(textbox1);
            // dt.Columns.Add("ListDropdown");
            cell.Controls.Add(DDLs);
            // dt.Columns.Add("Textbodx");
            cell.Controls.Add(textbox);
            row.Cells.Add(cell);
            table.Rows.Add(row);
        }
        Button btnSubmit = new Button();
        btnSubmit.ID = "btnSubmit";
        btnSubmit.Text = "Process";
        btnSubmit.Click += new System.EventHandler(Submit);

        Panel pans = new Panel();
        pans.ID = "panss";
        this.form1.Controls.Add(pans);
        pans.Controls.AddAt(0, table);
        pans.Controls.Add(btnSubmit);

        pans.Visible = true;
        //pn.Visible = true;


    }
}

F-ES Sitecore

Любые элементы управления, которые вы создаете сами, не "запоминаются" между обратными отправками, поэтому вам приходится воссоздавать их каждый раз при загрузке.

Ziee-M

Вы должны были установить этот комментарий в качестве ответа.

1 Ответов

Рейтинг:
7

Vincent Maverick Durano

Как уже упоминалось, динамически добавляемые элементы управления должны быть воссозданы на каждой обратной связи, чтобы сохранить их на странице. Видеть: ГАДЮКА.Объем сохраняется динамическое регулирование: динамические элементы управления исчезают после обратной передачи ASP.Net

Вот краткий пример того, как динамически генерировать строки TextBox элементы управления на table.

private int numOfRows = 0;
private int numOfColumns = 0;

private void GenerateTable(int colsCount, int rowsCount){

        //Creat the Table and Add it to the Page
        Table table = new Table();
        table.ID = "Table1";
        Page.Form.Controls.Add(table);

        // Now iterate through the table and add your controls 
        for (int i = 0; i < rowsCount; i++){
            TableRow row = new TableRow();
            for (int j = 0; j < colsCount; j++){
                TableCell cell = new TableCell();
                TextBox tb = new TextBox();

                // Set a unique ID for each TextBox added
                tb.ID = "TextBoxRow_" + i + "Col_" + j;
                // Add the control to the TableCell
                cell.Controls.Add(tb);
                // Add the TableCell to the TableRow
                row.Cells.Add(cell);
            }

            // Add the TableRow to the Table
            table.Rows.Add(row);
        }
}


Приведенный выше код просто создает пустую таблицу и добавляет ее в форму. Затем он заполняет таблицу столбцами и строками данных. TextBoxes исходя из значений rowsCount и colsCount.

Теперь вы можете вызвать описанный выше метод на Page_Load событие для воссоздания table когда он дает обратную связь.

protected void Page_Load(object sender, EventArgs e){
         // the two paramters are declared globally
         GenerateTable(numOfColumns, numOfRows);
}


Затем вы можете вызвать метод GenerateTable() при нажатии кнопки события, как это:

protected void Button1_Click(object sender, EventArgs e){
        //Check if the inputs are numbers
        if (int.TryParse(TextBox1.Text.Trim(), out numOfColumns) && int.TryParse(TextBox2.Text.Trim(), out numOfRows))
        {
            //Generate the Table based from the inputs
            GenerateTable(numOfColumns, numOfRows);

            //Store the current Rows and Columns In ViewState as a reference value when it post backs
            ViewState["cols"] = numOfColumns;
            ViewState["rows"] = numOfRows;
        }
        else
        {
            Response.Write("Values are not numeric!");
        }
}


Только для этого примера мы использовали два TextBoxes для того чтобы вы могли проверить значения numOfColumns и numOfRows параметры. В вашем случае вы можете обойти его и использовать значение выбранного выпадающего списка. Например:

numOfColumns = 1;
numOfRows = Convert.ToInt32(ddlTextBoxes.SelectedItem.Value;
GenerateTable(numOfColumns, numOfRows);


Наконец, поскольку мы закончили создавать наши Table с TextBoxes динамически, мы можем захватить значения, введенные из динамического TextBox с помощью Request.Form коллекция. Вот кодовый блок ниже.

protected void Button2_Click(object sender, EventArgs e){
    //Check if ViewState values are null
    if (ViewState["cols"] != null && ViewState["rows"] != null)
    {
        //Find the Table in the page
        Table table = (Table)Page.FindControl("Table1"); 
        if (table != null)
        {
            //Re create the Table with the current rows and columns
            GenerateTable(int.Parse(ViewState["cols"].ToString()), int.Parse(ViewState["rows"].ToString()));

            // Now we can loop through the rows and columns of the Table and get the values from the TextBoxes
            for (int i = 0; i < int.Parse(ViewState["rows"].ToString()) ; i++)
            {
                for (int j = 0; j < int.Parse(ViewState["cols"].ToString()); j++)
                {
                    //Print the values entered
                    if (Request.Form["TextBoxRow_" + i + "Col_" + j] != string.Empty)
                    {
                        Response.Write(Request.Form["TextBoxRow_" + i + "Col_" + j] + "<BR/>");
                    }
                }
            }
        }
    }
}


Вот и все. Надеюсь, это поможет.

Если вы также ищете GridView решение, вы можете проверить мою статью о: Динамическое добавление и удаление строк в GridView и сохранение всех строк сразу[^]