ASP.net动态文本框网格

Mar*_*ark 0 c# asp.net webforms c#-4.0

我有2个字符串列表,我想动态创建一个文本框网格:

List<string> X = {"A", "B", "C"};
List<string> Y = {"1", "2", "3", "4"};

          A     B     C
     1   TBX   TBX   TBX
     2   TBX   TBX   TBX
     3   TBX   TBX   TBX
     4   TBX   TBX   TBX

     [Button]
Run Code Online (Sandbox Code Playgroud)

当我在文本框中输入数据并单击按钮时,我希望能够遍历这些文本框并确定与每个文本框关联的“ X”和“ Y”坐标。

我大概可以弄清楚如何动态创建此文本框网格,但是我认为发布数据时会遇到问题。回发后如何从动态创建的文本框中获取值?

我不会在进行迭代和实际逻辑时遇到任何问题,但是我无法弄清楚如何将数据放入容器中以便可以对其进行迭代。在读取发布的数据时,我是否必须再次动态创建文本框?看起来像什么?

Pra*_*nam 5

这是另一种方法。您可以在asp.net页上有一个占位符。在后面的代码中,使用动态文本框动态创建一个表并将其插入占位符内。在这种情况下,您可以控制每个文本框的ID。在回发时,将保留在文本框中输入的值(由于ID是确定的,因此您也可以执行JavaScript操作)

这是aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicControls.aspx.cs" Inherits="Test2.DynamicControls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:PlaceHolder ID="PHDynamicTable" runat="server"></asp:PlaceHolder>
        <asp:Button runat="server" ID="btnSubmit" Text="Submit" 
            onclick="btnSubmit_Click" />
    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

后面的代码

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

namespace Test2
{
    public partial class DynamicControls : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected override void OnPreInit(EventArgs e)
        {
            base.OnPreInit(e);
            CreateTextBoxesInTable();
        }

        private void CreateTextBoxesInTable()
        {
            PHDynamicTable.Controls.Clear();

            List<string> X = new List<string>() { "A", "B", "C" };
            List<string> Y = new List<string>() { "1", "2", "3", "4" };

            Table table = new Table();
            table.ID = "dynamicTable";

            TableRow tr;
            foreach (string y in Y)
            {
                tr = new TableRow();

                foreach (string x in X)
                { 
                    TableCell tc = new TableCell();

                    TextBox textBox = new TextBox();
                    textBox.ID = "txt_" + x + y;
                    tc.Controls.Add(textBox);

                    tr.Cells.Add(tc);
                }

                table.Rows.Add(tr);
            }

            PHDynamicTable.Controls.Add(table);
        }

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (PHDynamicTable.Controls.Count > 0)
            {
                Table dynamicTable = (Table)PHDynamicTable.FindControl("dynamicTable");
                if (dynamicTable != null)
                {
                    foreach (TableRow tr in dynamicTable.Rows)
                    {
                        foreach (TableCell tc in tr.Cells)
                        {
                            TextBox textBox = (TextBox)tc.Controls[0];
                            string text = textBox.Text;
                            //Do whatever you want with the control
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

屏幕截图很少

带有数据的输入屏幕

在此处输入图片说明

回发时(提交)

在此处输入图片说明

提交后

在此处输入图片说明