MetaChildrenColumn.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / MetaChildrenColumn.cs / 1305376 / MetaChildrenColumn.cs

                            using System.Security.Permissions; 
using System.Collections.Generic;
using System.Diagnostics;
using System.Web.DynamicData.ModelProviders;
using System.Collections; 
using System.Web.Routing;
 
namespace System.Web.DynamicData { 
    /// 
    /// A special column representing 1-many relationships 
    /// 
    public class MetaChildrenColumn : MetaColumn, IMetaChildrenColumn {

        public MetaChildrenColumn(MetaTable table, ColumnProvider entityMember) 
            : base(table, entityMember) {
        } 
 
        /// 
        /// Perform initialization logic for this column 
        /// 
        internal protected override void Initialize() {
            base.Initialize();
 
            AssociationProvider a = this.Provider.Association;
            ChildTable = Model.GetTable(a.ToTable.Name, Table.DataContextType); 
 
            if (a.ToColumn != null) {
                ColumnInOtherTable = ChildTable.GetColumn(a.ToColumn.Name); 
            }
        }

        ///  
        /// Returns whether this entity set column is in a Many To Many relationship
        ///  
        public bool IsManyToMany { 
            get {
                return Provider.Association != null && 
                    Provider.Association.Direction == AssociationDirection.ManyToMany;
            }
        }
 
        /// 
        /// The child table (e.g. Products in Categories<-Products) 
        ///  
        public MetaTable ChildTable { get; private set; }
 
        /// 
        /// A pointer to the MetaColumn in the other table
        /// 
        public MetaColumn ColumnInOtherTable { get; private set; } 

        ///  
        /// Override disabling sorting 
        /// 
        internal override string SortExpressionInternal { 
            get {
                // children columns are not sortable
                return String.Empty;
            } 
        }
 
        /*protected*/ internal override bool ScaffoldNoCache { 
            get {
                // always display 1-many associations 
                return true;
            }
        }
 
        /// 
        /// Shortcut for getting the path to the list action for all entities in the child table that have the given row as a parent. 
        ///  
        /// 
        ///  
        public string GetChildrenListPath(object row) {
            return GetChildrenPath(PageAction.List, row);
        }
 
        public string GetChildrenPath(string action, object row) {
 
            // If there is no row, we can't get a path 
            if (row == null)
                return String.Empty; 

            return ChildTable.GetActionPath(action, GetRouteValues(row));
        }
 
        public string GetChildrenPath(string action, object row, string path) {
 
            // If there is no row, we can't get a path 
            if (row == null)
                return String.Empty; 

            if (String.IsNullOrEmpty(path)) {
                return GetChildrenPath(action, row);
            } 

            // Build a query string param with our primary key 
 
            RouteValueDictionary routeValues = GetRouteValues(row);
 
            // Add it to the path
            return QueryStringHandler.AddFiltersToPath(path, routeValues);
        }
 
        private RouteValueDictionary GetRouteValues(object row) {
            var routeValues = new RouteValueDictionary(); 
            IList pkValues = Table.GetPrimaryKeyValues(row); 

            var fkColumn = ColumnInOtherTable as MetaForeignKeyColumn; 

            if (fkColumn != null) {
                Debug.Assert(fkColumn.ForeignKeyNames.Count == pkValues.Count);
                for (int i = 0; i < fkColumn.ForeignKeyNames.Count; i++) { 
                    routeValues.Add(fkColumn.ForeignKeyNames[i], Misc.SanitizeQueryStringValue(pkValues[i]));
                } 
            } 

            return routeValues; 
        }


        IMetaTable IMetaChildrenColumn.ChildTable { 
            get { return ChildTable; }
        } 
 
        IMetaColumn IMetaChildrenColumn.ColumnInOtherTable {
            get { return ColumnInOtherTable; } 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK