1

データベースから文字列のリストを取得しようとしています。

リスト内の文字列ごとに、ラベルとテキストボックスをページに追加したいと考えています。

ボタンの送信時に、テキストボックスの値と対応するラベルの値を収集して、データベースに保存したいと考えています。

テキストボックスから値を取得するのに助けが必要です。

私がこれまでに持っているもの:

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;
    }
}
4

1 に答える 1

0

次のように、x を a にキャストしてから、必要な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
    }
}
于 2013-08-09T21:03:24.117 に答える