たとえば、ASP.NET で実行時にコントロールを注文する方法 Web ページに次の順序で 3 つのテキスト ボックスがあります。
- テキストボックス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>
出力は次のようになります
これは最初のモジュールです
これは 2 番目のモジュールです
これは 3 番目のモジュールです
順序を変更するにはどうすればよいですか。ドックのコンテナーのように機能するパネルをさらに 3 つ作成したことを確認してください。私のコードは次のようになります。
<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 から削除され、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);
}