有很多这方面的例子,我对使用递归来找到控件的概念非常合理。一旦在回发中找到控件,就可以与其进行交互等。
我的HTML标记中有一个空的asp:表:
<asp:Table ID="editDataTable" runat="server">
</asp:Table>
在Page_Load上,表格中填充了许多行和多列(我很自豪,我想到了这一点)。在某些表格单元格中有一个<asp:TextBox />
。
你已经猜到了,我需要获得这些文本框的价值!
(我已经获得了递归的代码并检查了它,看起来很好。)
我的表有两列。左边的标题包含“公司名称,电话”等标题,右栏包含带有各自标题值的文本框。因此,用户可以编辑文本框(例如,如果电话号码有变化)并提交更改。
显然,这些行是根据用户动态添加的。
我遇到的问题是:填充表格时需要将控件添加到页面。有点像:
myTable.Control.Add(new TextBox());
就我而言,我的表名为editDataTable。所以在我添加Rows的代码中,我也添加了控件,如下所示。
for (int i = 0; i < rowCount; i++)
{
editDataTable.Rows.Add(tblRow[j]); // This is where I add the ROW to my sexy table
editDataTable.Controls.Add(new TextBox()); // This is where I add the control
}
那些在你们中间醒来的人会知道你不能在表格中添加文本框控件!
最后,我的问题是:
这是我的递归代码,万一你好奇:
private void getControls(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c is TextBox && c.ID == null)
{
//Stuff
}
if (c.Controls.Count > 0)
{
getControls(c);
}
}
}
答案 0 :(得分:1)
您需要向TableCell
集合添加TableRow.Cells
,并将TextBox
添加到TableCell.Controls
集合中:
TableCell cell = new TableCell();
cell.Controls = new TextBox();
tblRow[j].Cells.Add(cell);
editDataTable.Rows.Add(tblRow[j]);
访问文本框的最直接方法是将它们全部保存在列表中:
List<TextBox> textBoxes = new List<TextBox>();
并将上面的cell.Controls = new TextBox();
替换为:
TextBox tb = new TextBox();
textBoxes.Add(tb);
cell.Controls = tb;
然后您可以在之后迭代textBoxes
,而无需在树中搜索它们。
答案 1 :(得分:1)
以下是在PageLoad期间在ASP.NET中构建动态表并通过回发读取值的示例。由于表是动态的,因此当页面回发到服务器时,不会重建它。如果要重建表,则需要再次渲染它并使用从Request.Form中提取的值来重新填充它。
HTML标记
<asp:Table ID="editDataTable" runat="server">
</asp:Table>
<asp:Button runat="server" Text="Submit" OnClick="Submit_Click" />
代码标记
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string[] dynamicTable = { "First Name", "Last Name", "Address", "Phone" };
foreach (string s in dynamicTable)
{
TableRow row = new TableRow();
// Add First Cell with Text to Row
row.Cells.Add(new TableCell() { Text = s });
// Create Second Cell
TableCell textBoxCell = new TableCell();
// Add Textbox Control to Second Cell
textBoxCell.Controls.Add(new TextBox() { ID = "Dynamic_" + s.Replace(" ","_") });
// Add Second Cell to Row
row.Cells.Add(textBoxCell);
// Add New Row to Table
editDataTable.Rows.Add(row);
}
}
}
protected void Submit_Click(object sender, EventArgs e)
{
for (int i = 0; i < Request.Form.Count; i++)
{
string key = Request.Form.GetKey(i);
if (key.Contains("Dynamic_"))
{
Response.Write("<p><strong>" + (key.Remove(0,8)).Replace("_"," ") + "</strong> :: " + Request.Form[i] + "</p>");
}
}
}