Как отсортировать элементы управления во время выполнения в ASP.NET - PullRequest
0 голосов
/ 30 января 2009

Как заказать элементы управления во время выполнения в ASP.NET например, у меня есть три текстовых поля на моей веб-странице в следующем порядке

  • TextBox1
  • TextBox2
  • textbox3

Я хочу, чтобы порядок этих элементов управления изменялся в зависимости от предпочтений пользователя

  • textbox3
  • TextBox2
  • TextBox1

это просто пример, есть идеи?

Ответы [ 6 ]

2 голосов
/ 30 января 2009

Наконец-то я нашел решение и подробно объясню

создайте «панель управления» и назовите ее «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>

в коде позади у меня есть что-то вроде этого

это удалит элемент управления dock1 из mypanel и поместит его в контейнер3

    Control myCtrl1 = myPanel.FindControl("dock1");
    Control containerCtrl1 = myPanel.FindControl("container3");
    myCtrl1.Visible = true;
    myPanel.Controls.Remove(myCtrl1);
    containerCtrl1 .Controls.Add(myCtrl1);

и вы можете управлять этими вещами в зависимости от предпочтений пользователя из базы данных или файлов cookie

С наилучшими пожеланиями

1 голос
/ 24 июня 2013

Подобная проблема была решена с помощью ".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));
1 голос
/ 30 января 2009

Самый простой способ - использовать сторонние элементы управления, такие как Telerik . Точнее DockZones.
В противном случае вам придется создать свой собственный компоновщик страниц с этой функцией.

1 голос
/ 30 января 2009

JQuery UI Framework может сделать это за вас. Проверьте это демо и документы для того же.

0 голосов
/ 30 января 2009

Захватите все идентификаторы элементов управления текстового поля и сохраните их в массиве. Затем просто выполните обратную сортировку:

Array.Reverse( mytextboxArray );
0 голосов
/ 30 января 2009

Для очень простого подтверждения концепции вам понадобится какое-то резервное хранилище, например таблица базы данных, в которой хранятся 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);
}
...