如何在ASP.NET中运行时对控件进行排序

时间:2009-01-30 01:41:35

标签: c# asp.net vb.net controls runtime

如何在ASP.NET中的运行时命令控件 例如,我的网页中有三个文本框,顺序如下

  • TextBox1中
  • TextBox2中
  • textbox3

我希望根据用户偏好更改这些控件的顺序

  • textbox3
  • TextBox2中
  • TextBox1中

这只是一个例子,任何想法?

6 个答案:

答案 0 :(得分:2)

最后,我找到了一个解决方案,我将详细解释

创建一个“面板控件”并将其命名为“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中的用户偏好来管理这些内容

最好的问候

答案 1 :(得分:1)

jQuery UI框架可以为您做到这一点。查看此demodocs了解相同内容。

答案 2 :(得分:1)

最简单的方法是使用第三方控件,例如Telerik。更确切地说是DockZones 否则,您必须使用此功能创建自己的页面构建器。

答案 3 :(得分:1)

有一个类似的问题,并通过使用“.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));

答案 4 :(得分:-2)

对于一个非常简单的概念验证,您需要某种类型的后备存储,如存储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);
}

答案 5 :(得分:-2)

获取文本框控件的所有ID并将其存储在数组中。然后做一个反向排序:

Array.Reverse( mytextboxArray );