【问题标题】:Dynamically creating multiple RadDocks on a button click单击按钮动态创建多个 RadDocks
【发布时间】:2012-05-02 13:33:56
【问题描述】:

我在尝试同时动态创建多个 RadDocks 时遇到了一些问题。

我想要实现的是在单击按钮时将多个 Dock 添加到 DockZone,但我唯一得到的是第一个 Dock 正确创建并在其余 Dock 未显示时显示(它们显示刷新网页后),它们被创建但漂浮在区域之外。

我在一次创建一个 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);

            }
        }

所以,总结一下。我想正确生成 Docks;立即显示它们,无需刷新页面并在 DockZone 中创建它们。

任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net c#-4.0 telerik


    【解决方案1】:

    遇到的行为似乎是由于在页面上保存/加载 RadDock 控件的布局(缺少停靠)和设置不同的 ID 或/和 UniqueName,在回发后重新创建 RadDocks(浮动码头)时。

    在线演示Dock / My Portal是动态创建和持久化RadDocks状态的一个很好的例子,它实现的场景和你的类似,所以我建议你把它作为你进一步开发的参考。帮助文章Dynamically Creating RadDock Controls 也很有用,因为它列出了动态创建 RadDocks 的主要步骤。

    总体而言,您提供的代码似乎是正确的,尽管我建议在 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);
    

    由于我主要猜测您实现的其余部分是什么,因此我建议您检查提供的资源并利用它们来实现所需的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 2020-04-12
      • 2011-09-05
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多