【发布时间】:2009-01-30 01:41:34
【问题描述】:
如何在 ASP.NET 中在运行时订购控件 例如,我的网页中按以下顺序有三个文本框
- 文本框1
- 文本框2
- 文本框3
我希望根据用户偏好更改这些控件的顺序
- 文本框3
- 文本框2
- 文本框1
这只是一个例子,你知道吗?
【问题讨论】:
标签: c# asp.net vb.net controls runtime
如何在 ASP.NET 中在运行时订购控件 例如,我的网页中按以下顺序有三个文本框
我希望根据用户偏好更改这些控件的顺序
这只是一个例子,你知道吗?
【问题讨论】:
标签: c# asp.net vb.net controls runtime
终于找到了解决办法,我会详细解释一下
创建一个“面板控件”并将其命名为“myPanel”并将您想要使用的所有控件放入其中
<asp:Panel ID="myPanel" runat="server">
<asp:Panel ID="dock1" runat="server">this is first module</asp:Panel>
<asp:Panel ID="dock2" runat="server">this is second module</asp:Panel>
<asp:Panel ID="dock3" runat="server">this is third module</asp:Panel>
</asp:Panel>
输出如下
这是第一个模块
这是第二个模块
这是第三个模块
所以我应该怎么做才能改变他们的顺序,让我们看看 我创建了更多三个面板来充当码头的容器 我的代码会是这样的
<asp:Panel ID="myPanel" runat="server">
<asp:Panel ID="container1" runat="server"></asp:Panel>
<asp:Panel ID="container2" runat="server"></asp:Panel>
<asp:Panel ID="container3" runat="server"></asp:Panel>
<asp:Panel ID="dock1" runat="server">this is first module</asp:Panel>
<asp:Panel ID="dock2" runat="server">this is second module</asp:Panel>
<asp:Panel ID="dock3" runat="server">this is third module</asp:Panel>
</asp:Panel>
在后面的代码中我有这样的东西
这将从 mypanel 中删除 dock1 控件并将其放入 container3 中
Control myCtrl1 = myPanel.FindControl("dock1");
Control containerCtrl1 = myPanel.FindControl("container3");
myCtrl1.Visible = true;
myPanel.Controls.Remove(myCtrl1);
containerCtrl1 .Controls.Add(myCtrl1);
您可以根据用户偏好从数据库或 cookie 来管理这些东西
最好的问候
【讨论】:
最简单的方法是使用第三方控件,例如Telerik。更准确地说是 DockZones。
否则,您必须使用此功能创建自己的页面构建器。
【讨论】:
有一个类似的问题并通过使用“.Controls.AddAt”并为您希望它出现的顺序指定一个索引来解决。
为了让我的图表首先出现在我更改的面板中:
GraphPanel.Controls.Add(GE.GetChart(t13));
到:
GraphPanel.Controls.AddAt(0, (GE.GetChart(t13)));
您的示例将文本框按 3、2 然后 1 的顺序排列为:
Panel1.Controls.AddAt(0,(TextBox3));
Panel1.Controls.AddAt(1,(TextBox2));
Panel1.Controls.AddAt(2,(TextBox1));
【讨论】:
对于一个非常简单的概念验证,您需要某种后备存储,例如存储 UserID、Ordinal 和 AscxFileName 的数据库表。在 SQL 中,您可以运行如下查询:
SELECT AscxFileName FROM tableControls WHERE UserID=@UserID ORDER BY Ordinal
然后用结果集:
while(IDataReader.Read())
{
Control myControl = Page.LoadControl(IDataReader["AscxFileName"].ToString());
myPanel.Controls.Add(myControl);
}
【讨论】:
获取文本框控件的所有 ID 并将它们存储在一个数组中。然后做一个反向排序:
Array.Reverse( mytextboxArray );
【讨论】: