public static void MergeItems(DashboardItemCollection fromItems, DashboardMerger dashboardMerger) { DashboardItemCollection toItems = dashboardMerger.OriginalDashboard.Items; IList <DashboardItem> newItems = dashboardMerger.NewItems; foreach (DashboardItem dashboardItem in fromItems) { AddItemCopy(dashboardItem, dashboardMerger, (dashboardItemCopy) => { toItems.Add(dashboardItemCopy); newItems.Add(dashboardItemCopy); }); } }
static void AddItemCopy(DashboardItem originalItem, DashboardMerger dashboardMerger, Action <DashboardItem> addItemDelegate) { DashboardItemCollection toItems = dashboardMerger.OriginalDashboard.Items; IDictionary <string, string> dataSourceNamesMap = dashboardMerger.DataSourceNamesMap; DataSourceCollection existingDataSources = dashboardMerger.OriginalDashboard.DataSources; DashboardItem dashboardItemCopy = originalItem.CreateCopy(); bool shouldAddItem = false; if (toItems.Any(item => item.ComponentName == originalItem.ComponentName)) { if (ResolveDashboardItemNameConflict(dashboardItemCopy, originalItem.ComponentName, toItems, dashboardMerger.DashboardItemNamesMap)) { shouldAddItem = true; } } else { dashboardItemCopy.ComponentName = originalItem.ComponentName; shouldAddItem = true; } if (shouldAddItem) { DataDashboardItem dataDashboardItem = dashboardItemCopy as DataDashboardItem; if (dataDashboardItem != null && dataDashboardItem.DataSource != null) { string newDataSourceName = String.Empty; if (!dataSourceNamesMap.TryGetValue(dataDashboardItem.DataSource.ComponentName, out newDataSourceName)) { newDataSourceName = dataDashboardItem.DataSource.ComponentName; } dataDashboardItem.DataSource = existingDataSources[newDataSourceName]; } addItemDelegate(dashboardItemCopy); } }
private void simpleButton1_Click(object sender, EventArgs e) { DashboardItemCollection controls = dashboardViewer1.Dashboard.Items; PrintControlInfo(controls); }
static bool ResolveDashboardItemNameConflict(DashboardItem dashboardItemCopy, string originalItemName, DashboardItemCollection toItems, IDictionary <string, string> dashboardItemNamesMap) { // Provide your item component name confilict resolution logic here string newName = NamesGenerator.GenerateName(originalItemName, 1, toItems.Select(item => item.ComponentName)); dashboardItemNamesMap.Add(originalItemName, newName); dashboardItemCopy.ComponentName = newName; return(true); }