繁体   English   中英

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

[英]How to sort controls at runtime in ASP.NET

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

  • 文字框1
  • textbox2
  • 文字框3

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

  • 文字框3
  • textbox2
  • 文字框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中的用户偏好来管理这些事情

最好的祝福

发生了类似的问题,并通过使用“ .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));

jQuery UI框架可以为您做到这一点。 查看此演示文档

最简单的方法是使用第三方控件(例如Telerik) 更准确地说是DockZones。
否则,您将不得不使用此功能创建自己的Pagebuilder。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM