我在尝试同时动态创建多个RadDocks时遇到了一些问题。
我想要实现的是在单击按钮时将多个Docks添加到DockZone,但我唯一得到的是第一个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);
}
}
所以,总结一切。我想正确地生成码头;立即显示它们,而无需刷新页面并在DockZone中创建它们。
任何帮助都将不胜感激。
答案 0 :(得分: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);
由于我主要猜测你的其他实现是什么,我建议检查提供的资源并利用它们来实现所需的功能。