【问题标题】:How to sort controls at runtime in ASP.NET如何在运行时在 ASP.NET 中对控件进行排序
【发布时间】:2009-01-30 01:41:34
【问题描述】:

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

  • 文本框1
  • 文本框2
  • 文本框3

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

  • 文本框3
  • 文本框2
  • 文本框1

这只是一个例子,你知道吗?

【问题讨论】:

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


    【解决方案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 来管理这些东西

    最好的问候

    【讨论】:

    • 'myCtrl1.Visible = true;'的目的是什么我最终不得不添加它,因为我的面板一直消失
    【解决方案2】:

    jQuery UI 框架可以为您做到这一点。看看这个demodocs 是一样的。

    【讨论】:

    • 谢谢,这是真的,但是它在客户端工作,我认为这会消耗系统资源,因为整个页面将被加载,然后 jQuery 将隐藏我想要隐藏的对象并使用我想要排序的对象,谢谢
    • 如果你想在运行时在 asp.net 上做任何事情,最好在客户端做。您的客户端足够强大,可以运行现代网络浏览器,不是吗?
    【解决方案3】:

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

    【讨论】:

    • 谢谢,Telerik 可以工作,我已经在我的 X 工作中使用过它,我认为它有一些问题 (1) 它不是免费的 (2) 它比我想要的要多 (3)我感觉它消耗系统资源(只是一种感觉:))
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 谢谢,这并没有解决问题,因为我想使用控件而不是按顺序加载它们
      【解决方案6】:

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

      Array.Reverse( mytextboxArray );
      

      【讨论】:

      • 我想要的是重新调整页面中的控件位置,感谢您的帮助
      • 您需要先执行此操作。然后,您可以在页面上动态显示控件,而无需使用数据库或 JavaScript 解决方案。
      猜你喜欢
      • 2016-10-15
      • 2016-03-02
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      相关资源
      最近更新 更多