0

複数のRadDocksを同時に動的に作成しようとすると問題が発生します。

私が達成したいのは、ボタンクリックで複数のドックをDockZoneに追加することですが、最初にDockが適切に作成され、残りが表示されていないときに表示されます(更新後に表示されます)。ウェブページ)とそれらは作成されますが、ゾーンの外に浮かんでいます。

一度に1つのDockを作成する場合にも同様のシナリオがあり、それは魅力のように機能します。

コードは次のとおりです。

protected void rbAddTickets_Click(object sender, EventArgs e)
        {
            var ticketList = (from t in db.Ticket
                              where t.idManager == idManager && t.Zatvoren == false || t.idManager == null && t.Zatvoren == false
                              select t).ToList();

            var memoTicketList = from t in ticketList
                                 where t.Memo == null || t.Memo == true
                                 orderby t.Firma.Naziv, t.idNadredeniTicket, t.RedniBroj, t.Opis
                                 select t;

            foreach (var ticket in memoTicketList)
            {
                RadDock dock = new RadDock();
                dock.UniqueName = ticket.idTicket.ToString();
                dock.ID = string.Format("RadDock{0}", dock.UniqueName);
                dock.Title = ticket.idNadredeniTicket + "-" + ticket.RedniBroj + " (" + ticket.Firma.Naziv + ")";
                dock.Text = ticket.Opis;
                dock.DockMode = DockMode.Docked;
                //dock.Index = Convert.ToInt32(Session["MinIndex"]) - 1;


                dock.Commands.Add(new DockCloseCommand());
                dock.Commands.Add(new DockExpandCollapseCommand());
                dock.Command += new DockCommandEventHandler(DockCommands);

                //ticket.Memo = true;
                //db.SaveChanges(); OMOGUĆI KASNIJE

                UpdatePanel1.ContentTemplateContainer.Controls.Add(dock);

                ScriptManager.RegisterStartupScript(
                dock,
                this.GetType(),
                "AddDock",
                string.Format(@"function _addDock() {{
    Sys.Application.remove_load(_addDock);
    $find('{1}').dock($find('{0}'));
    $find('{0}').doPostBack('DockPositionChanged');
}};
Sys.Application.add_load(_addDock);", dock.ClientID, rdzIncidenti.ClientID),
                true);
                CreateSaveStateTrigger(dock);

            }
        }

だから、すべてを要約すると。ドックを適切に生成したいと思います。ページを更新してDockZone内に作成しなくても、すぐに表示できます。

どんな助けでもいただければ幸いです。

4

1 に答える 1

1

発生した動作は、ポストバック(フローティングドック)の後にRadDocksを再作成するときに、ページ上のRadDockコントロールのレイアウトの保存/ロード(欠落しているドック)および異なるIDまたはUniqueNameの設定の問題が原因であると思われます。

オンラインデモのDock/My Portalは、RadDocksの状態を動的に作成して永続化する良い例であり、実装するシナリオはあなたのシナリオと似ているため、今後の開発のリファレンスとして使用することをお勧めします。RadDocksを動的に作成するための主な手順がリストされているため、ヘルプ記事「RadDockコントロールを動的に作成する」も役立ちます。

全体的に、提供したコードは正しいように見えますが、ボタンクリックでページに挿入すると、RadDockLayoutのControlsコレクションに新しいRadDocksを追加し、Dockメソッドを介して特定のRadDockZoneにドッキングすることをお勧めします。これは、リンクされたデモのButtonAddDock_Clickイベントハンドラーで、次のコード行を介して実装されます。

    RadDockZone dz = (RadDockZone)FindControl(DropDownZone.SelectedItem.Text);
    //adding the dock to the docklayout and then docking it to the zone to avoid ViewState issues on subsequent postback
    RadDockLayout1.Controls.Add(dock);
    dock.Dock(dz);

残りの実装についてはほとんど推測しているので、提供されているリソースを調べて、目的の機能を実現するためにそれらを利用することをお勧めします。

于 2012-05-03T13:02:58.307 に答える