Beispiel #1
0
        private static void RenderRows_FromDataTable(RenderContext ctx)
        {
            var data = (DataTable)ctx.Rows;

            foreach (DataRow row in data.Rows)
            {
                var rowEntity = new Entity();
                rowEntity.Class      = KnownClasses.Row;
                rowEntity.Rel        = KnownRelations.Row;
                rowEntity.Properties = new Media.PropertyCollection();
                foreach (DataColumn col in data.Columns)
                {
                    var value = row[col];
                    if (value != null)
                    {
                        var name = Conventions.MakeFieldName(col);
                        rowEntity.Properties.Add(name, value);
                    }
                }
                ctx.Entity.Entities.Add(rowEntity);

                LinkRenderer.RenderRowLinks(ctx, rowEntity, row);
            }
            ctx.Entity.Properties.Add("_rowCount", data.Rows.Count);
        }
Beispiel #2
0
        static PropertyInfo[] RenderRows_FromEnumerable(RenderContext ctx)
        {
            var data          = ((IEnumerable)ctx.Rows).Cast <object>();
            var allProperties = new List <PropertyInfo>();

            var count = 0;

            foreach (var row in data)
            {
                var rowEntity = new Entity();
                rowEntity.Class = new NameCollection();
                rowEntity.Class.Add(KnownClasses.Row);

                var entityClass = Conventions.MakeClassName(row);
                if (entityClass != null)
                {
                    rowEntity.Class.Add(entityClass);
                }

                rowEntity.Rel        = KnownRelations.Row;
                rowEntity.Properties = new Media.PropertyCollection();

                var properties = row.GetType().GetProperties();
                foreach (var property in properties)
                {
                    if (!allProperties.Contains(property))
                    {
                        allProperties.Add(property);
                    }

                    var value = property.GetValue(row);
                    if (value != null)
                    {
                        var name = Conventions.MakeFieldName(property.Name);
                        rowEntity.Properties.Add(name, value);
                    }
                }

                LinkRenderer.RenderRowLinks(ctx, rowEntity, row);

                ctx.Entity.Entities.Add(rowEntity);
                count++;
            }
            ctx.Entity.Properties.Add("_rowCount", count);

            var knownProperties = (
                from property in allProperties
                let name = Conventions.MakeFieldName(property.Name)
                           group property by name into g
                           select g.First()
                ).ToArray();

            return(knownProperties);
        }
Beispiel #3
0
        public static void RenderData(RenderContext ctx)
        {
            if (!ctx.Query.HasMethod("GetData"))
            {
                return;
            }

            if (ctx.Entity.Class == null)
            {
                ctx.Entity.Class = new NameCollection();
            }
            if (ctx.Entity.Properties == null)
            {
                ctx.Entity.Properties = new Media.PropertyCollection();
            }

            ctx.Entity.Class.AddAt(0, KnownClasses.Data);

            var type = GetDataType(ctx);

            if (type == typeof(DataTable))
            {
                RenderData_FromDataTable(ctx);
                InferDataHeaders_FromDataTable(ctx);

                var data = (DataTable)ctx.Data;
                var row  = data?.Rows.Cast <DataRow>().FirstOrDefault();
                if (row != null)
                {
                    LinkRenderer.RenderDataLinks(ctx, row);
                }
            }
            else
            {
                RenderData_FromObject(ctx);
                InferDataHeaders_FromObject(ctx);

                if (ctx.Data != null)
                {
                    LinkRenderer.RenderDataLinks(ctx, ctx.Data);
                }
            }

            UpdateDataHeaders(ctx);
        }
Beispiel #4
0
 public static void RenderLinks(RenderContext ctx)
 {
     LinkRenderer.RenderLinks(ctx);
 }