Esempio n. 1
0
        private string CreateRows(object source, RenderingEngine engine)
        {
            var props = source.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            var rows  = new StringBuilder();

            foreach (var propertyInfo in props)
            {
                var childRenderer  = engine.GetRendererForType(propertyInfo.PropertyType);
                var childValue     = propertyInfo.GetValue(source);
                var childRendering = childRenderer.Render(childValue, engine);
                var row            = $@"<tr><td>{propertyInfo.Name}</td><td>{childRendering.Content}</td></tr>";
                rows.AppendLine(row);
            }

            var fields = source.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);

            foreach (var fieldInfo in fields)
            {
                var childRenderer  = engine.GetRendererForType(fieldInfo.FieldType);
                var childValue     = fieldInfo.GetValue(source);
                var childRendering = childRenderer.Render(childValue, engine);
                var row            = $@"<tr><td>{fieldInfo.Name}</td><td>{childRendering.Content}</td></tr>";
                rows.AppendLine(row);
            }

            return(rows.ToString());
        }
Esempio n. 2
0
        private static void CreateTableRow(IEnumerable <MemberInfo> memberInfos, RenderingEngine engine, object element,
                                           IRendering defaultRendering, StringBuilder rowsBuffer)
        {
            if (memberInfos?.Any() != false)
            {
                foreach (var memberInfo in memberInfos)
                {
                    IRendering childRendering = null;
                    switch (memberInfo)
                    {
                    case PropertyInfo propertyInfo:
                    {
                        var childRenderer = engine.GetRendererForType(propertyInfo.PropertyType);
                        var childValue    = propertyInfo.GetValue(element);
                        childRendering = childValue == null ? defaultRendering : childRenderer.Render(childValue, engine);
                    }
                    break;

                    case FieldInfo fieldInfo:
                    {
                        var childRenderer = engine.GetRendererForType(fieldInfo.FieldType);
                        var childValue    = fieldInfo.GetValue(element);
                        childRendering = childValue == null ? defaultRendering : childRenderer.Render(childValue, engine);
                    }
                    break;
                    }

                    var row = $"\t\t<td>{childRendering?.Content ?? string.Empty}</td>";
                    rowsBuffer.AppendLine(row);
                }
            }
            else
            {
                var childRenderer  = engine.GetRendererForType(element.GetType());
                var childRendering = childRenderer.Render(element, engine);
                rowsBuffer.AppendLine($"\t\t<td>{childRendering.Content}</td>");
            }
        }
Esempio n. 3
0
        public static string CreateTableRowsFromValues(IEnumerable <MemberInfo> memberInfos, IEnumerable <KeyValuePair <object, object> > source, RenderingEngine engine,
                                                       bool emptyFirstCell = false)
        {
            var nullRendering = new PlainTextRendering("null");
            var rowsBuffer    = new StringBuilder();


            foreach (var(key, element) in source.Select(e => (e.Key, e.Value)))
            {
                rowsBuffer.AppendLine("\t<tr>");
                if (emptyFirstCell)
                {
                    rowsBuffer.AppendLine("\t\t<td></td>");
                }

                var keyRenderer  = engine.GetRendererForType(key.GetType());
                var keyRendering = keyRenderer.Render(key, engine);
                rowsBuffer.AppendLine($"\t\t<td>{keyRendering?.Content ?? string.Empty}</td>");
                CreateTableRow(memberInfos, engine, element, nullRendering, rowsBuffer);
                rowsBuffer.AppendLine("\t</tr>");
            }

            return(rowsBuffer.ToString());
        }