【问题标题】:Dynamically adding columns to ASP.NET table - postback向 ASP.NET 表动态添加列 - 回发
【发布时间】:2011-09-06 03:02:51
【问题描述】:

我的 aspx 页面上有一个 asp.net 表格控件,其中包含 asp.net TableRow 对象;

我的目的是通过单击某个图像按钮向此表动态添加列。 该表由几个 TableRow 对象组成,每个对象默认包含一个带有一些标签的 ASP.NET TableCell。我正在尝试通过单击图像按钮来添加列,据说将一个新单元格添加到该行的单元格集合中。例如,如果我想为特定行添加一个包含下拉列表的列,我会这样做:

DropDownList ddl = new DropDownList();
            TableCell tableCell= new TableCell();
            tableCell.Controls.Add(ddl);
            tableRow.Cells.Add(tableCell);

问题是我永远不能超过一个添加的列,因为每当我点击我创建的asp.net“AddColumn”按钮时,在我到达生活中某个地方的处理程序之前 循环 TableRow 对象死亡,以及它的单元格集合。 我考虑过以某种方式在会话中保存行对象的副本,但我想不出 进行保存的正确时间点。

无论如何 - asp.net 不应该将所有内容保持在视图状态吗?请帮助并提供解决方案。我完全糊涂了。

顺便说一句,ASPX 看起来像这样:

<asp:TableRow runat="server" ID="RequestorEmailRow">
                        <asp:TableCell runat="server" Text="...">
                        </asp:TableCell>
                    </asp:TableRow>

【问题讨论】:

  • 您必须最迟在 Page_Load 中在每次回发时重新创建已添加的 TableCell。在 ViewState 中保存创建的 Cells 的数量。为避免 DropDownLists 出现视图状态和事件处理问题,您还必须确保它们在每次回发时获得相同的 ID。

标签: asp.net viewstate xmltable


【解决方案1】:

ASP.NET 视图状态只存储控件的值,而不是控件本身的存在。视图状态在 Page_InitPage_Load 之间反序列化。如果将&lt;asp: 样式对象动态添加到网页,则必须在Page_Init 中重新创建它们,否则ASP.NET 将不会处理它们的视图状态。

更好的方法是使用GridView 控件(在工具箱的“数据”部分中)。与asp:Table 不同,asp:GridView 的视图状态包括您可能添加的任何行。

【讨论】:

  • page_init 解决方案听起来不错,但您能详细说明一下我应该做什么吗?
  • @user181218:关于动态控制方式的更多信息,请参见this article。使用起来很痛苦;如果我是你,我会改为查看 GridView 控件。
猜你喜欢
  • 2010-09-19
  • 2011-02-10
  • 2010-10-01
  • 1970-01-01
  • 2013-06-10
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
相关资源
最近更新 更多