public static MainPageUrlBuilder GetReadUrlForRecord(BaseNavigatorInfo nav, string id, string destinationTable) { var url = new MainPageUrlBuilder { IsDataControl = true, IsRead = true, UserControl = nav.TableName + MainPageUrlBuilder.UserControlTypeEdit, }; RecurciveParentUrl(string.Empty, url, nav, id, destinationTable); return(url); }
internal static string RecurciveParentUrlID <TKey, TTableFrom, TTableTo>(BaseNavigatorInfo nav, TKey id, BaseNavigatorInfo parentNav) where TKey : struct where TTableFrom : class where TTableTo : class { var view = (BaseDataSourceView <TKey>)nav.DataSource; var data = view.GetSelectRow(id).Select(GetSelectItemExpression <TTableFrom>(view.RowType)).Select(GetSelectExpression <TTableFrom, TTableTo>(parentNav.ReferenceName)); if (typeof(long) == parentNav.DataSourceViewGetName.KeyType) { return(data.Select(GetIDExpression <TTableTo>()).FirstOrDefault().ToString()); } throw new NotSupportedException("MultipleKey is not supported"); }
protected void CreateCustomNavigators(BaseNavigatorInfo navigator) { foreach (var item in navigator.ParentNavigators) { if (navigator.TableType != item.TableType) { if (!string.IsNullOrEmpty(item.CustomNavigatorUserControl)) { var control = (BaseNavigatorCustomControl)Page.LoadControl(item.CustomNavigatorUserControl); NavigatorCustomControls[item] = control; Controls.Add(control); } CreateCustomNavigators(item); } } }
private static void RecurciveParentUrl(string reference, MainPageUrlBuilder url, BaseNavigatorInfo nav, string id, string destinationTable) { url.QueryParameters[MainPageUrlBuilder.ReferencIDPrefix + nav.TableName] = id; if (!string.IsNullOrEmpty(reference)) { url.QueryParameters[reference + ".id"] = id; } var parentNav = nav.ParentNavigators.FirstOrDefault(r => r.TableName.Equals(destinationTable, StringComparison.OrdinalIgnoreCase)) ?? nav.ParentNavigators.FirstOrDefault(r => !r.HideIfEmpty); if (parentNav == null) { return; } var methodInfo = typeof(NavigatorManager).GetMethod("RecurciveParentUrlID", BindingFlags.Static | BindingFlags.NonPublic); var genericMethod = methodInfo.MakeGenericMethod(nav.DataSourceViewGetName.KeyType, nav.TableType, parentNav.TableType); var nextId = (string)genericMethod.Invoke(null, new[] { nav, nav.DataSourceViewGetName.GetKey(id), parentNav }); if (string.IsNullOrEmpty(nextId)) { return; } RecurciveParentUrl( string.IsNullOrEmpty(reference) ? parentNav.ReferenceName : reference + "." + parentNav.ReferenceName, url, parentNav, nextId, destinationTable); }