例如,如何在 ASP.NET 中在运行时订购控件我的网页中有三个文本框,顺序如下
- 文本框1
- 文本框2
- 文本框3
我希望根据用户偏好更改这些控件的顺序
- 文本框3
- 文本框2
- 文本框1
这只是一个例子,有什么想法吗?
终于找到了解决办法,我会详细解释
创建一个“面板控件”并将其命名为“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 );