簡體   English   中英

循環所有文本框並在c#asp.net中收集值

[英]Loop all textbox and collect values in c# asp.net

我正在嘗試從數據庫中獲取字符串列表。

對於列表中的每個字符串,我想向頁面添加標簽和文本框。

在提交按鈕上,我想收集文本框值以及相應的標簽值,然后將其保存到數據庫。

我需要幫助從文本框中檢索值。

到目前為止,我有:

Panel1在aspx頁面上

    protected List<string> items = MyClass.GetItems();


    protected void Page_Load(object sender, EventArgs e)
    {
        GenerateItemsTable();
    }

    private void GenerateItemsTable()
    {
        Table table = new Table();
        table.ID = "Table1";
        //PlaceHolder1.Controls.Add(table);
        Panel1.Controls.Add(table);

        foreach (var x in items)
        {
            TableRow row = new TableRow();
            for (int y = 0; y < 1; y++)
            {
                TableCell labelCell = new TableCell();
                labelCell.Controls.Add(CreateLabel(x));
                labelCell.CssClass = "tdLabel";
                row.Cells.Add(labelCell);

                TableCell txbCell = new TableCell();
                txbCell.Controls.Add(CreateRadNumericTextBox(x));
                txbCell.Width = 30;
                row.Cells.Add(txbCell);

                TableCell dataTypeCell = new TableCell();
                dataTypeCell.Text = "<span style='font-size: 10px; color: #777'>(student count)</span>";
                dataTypeCell.Width = 100;
                row.Cells.Add(dataTypeCell);

                TableCell fourthCell = new TableCell();
                if (x == items[items.Count - 1])
                {
                    RadButton rb = new RadButton();
                    rb.ID = "submit";
                    rb.Text = "Submit Guidance";
                    rb.Skin = "Forest";
                    rb.Click += new EventHandler(submit_Click);
                    rb.AutoPostBack = true;
                    fourthCell.Controls.Add(rb);
                    row.Cells.Add(fourthCell);
                }
                else
                {
                    row.Cells.Add(fourthCell);
                }

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

    private RadNumericTextBox CreateRadNumericTextBox(string x)
    {
        RadNumericTextBox rntb = new RadNumericTextBox();
        rntb.ID = x;
        rntb.Width = 40;
        return rntb;
    }

    private Label CreateLabel(string x)
    {
        Label l = new Label();
        l.ID = "label_" + x;
        l.Text = "<label>" + x + "</label>";
        return l;
    }

    protected void submit_Click(object sender, EventArgs e)
    {
        foreach (Control x in FindControl("Panel1").FindControl("Table1").Controls)
        {
            if (x is RadNumericTextBox)
            {
                //how to get the data??????/
            }
        }
    }

(感謝那些實際閱讀整篇文章的人)

-----------------更新的解決方案------------------------------- -------------

我決定更改它,並將列表從數據庫存儲在page_load中。 存儲列表后,我遍歷列表並使用FindControl()訪問文本框。 像這樣

//a couple containers
protected class ItemVal
{
    public int Value { get; set; }
    public string Name { get; set; }
}
protected List<ItemVal> items = new List<ItemVal>(); 


//get the list from that database
protected void GetItems()
{
    foreach (var x in MyClass.GetItems())
    {
        ItemVal i = new ItemVal();
        i.Name = x;
        items.Add(i);
    }
}

//submit
protected void submit_Click(object sender, EventArgs e)
{
    foreach (var x in items)
    {
        RadNumericTextBox rntb = FindControl(x.Name) as RadNumericTextBox;
        x.Value = (int)rntb.Value;
    }
}

您需要將x RadNumericTextBox轉換為RadNumericTextBox ,然后拉出所需的屬性值,如下所示:

RadNumericTextBox theRadNumericTextBox = x as RadNumericTextBox;
string val = theRadNumericTextBox.Text;

然后你想要的其他控件,您將需要投入if對它們的類型條件,就像這樣:

if (x is Label)
{
    Label theLabel = x as Label;
    string valLabel = theLabel.Text;
}

這是該方法的完整代碼:

protected void submit_Click(object sender, EventArgs e)
{
    foreach (Control x in FindControl("Panel1").FindControl("Table1").Controls)
    {
        Label theLabel;
        RadNumericTextBox theRadNumericTextBox;

        if (x is RadNumericTextBox)
        {
            RadNumericTextBox theRadNumericTextBox = x as RadNumericTextBox;
            string val = theRadNumericTextBox.Text;
        }

        if (x is Label)
        {
            Label theLabel = x as Label;
            string valLabel = theLabel.Text;
        }

        // Either store up in a list or save to the database on each loop; it is recommended to store a list and send all the changes at once for a database save, but that is your choice
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM