public string Process(string template, Models.TemplateModel model)
        {
            string templateKey = String.Format("{0}_{1}", model.GridContext.GridName, model.GridColumn.ColumnName);

            var result = RazorEngine.Engine.Razor.RunCompile(template, templateKey, typeof(Models.TemplateModel), model);

            return(result);
        }
        public string Process(string template, Models.TemplateModel model)
        {
            if (String.IsNullOrWhiteSpace(template))
            {
                return("");
            }

            return(Format(template, model));
        }
        private object EvaluateParameter(string name, Models.TemplateModel model)
        {
            object val = "";

            if (String.Compare(name, "value", true) == 0)
            {
                val = model.Value;
            }
            else
            {
                int dotPos = name.IndexOf(".");

                if (dotPos == -1)
                {
                    throw new FormatException("Format item missing prefix: " + name);
                }

                string prefix = name.Substring(0, dotPos).Trim().ToLower();
                string suffix = name.Substring(dotPos + 1);



                switch (prefix)
                {
                case "model":
                    val = ReflectPropertyValue(model.Item, suffix);
                    break;

                case "row":
                    if (!model.Row.Cells.ContainsKey(suffix))
                    {
                        throw new Exception("Cannot access cell '" + suffix + "' in current row. It does not exist or has not yet been evaluated");
                    }
                    val = model.Row.Cells[suffix].HtmlText;
                    break;

                default:
                    throw new Exception("Invalid prefix in format string: " + prefix);
                }
            }

            return(val);
        }
        private string Format(string format, Models.TemplateModel model)
        {
            int currentPos = 0;

            StringBuilder sbResult = new StringBuilder();
            StringBuilder sbItem   = new StringBuilder();

            int  fStart = 0;
            bool inside = false;
            int  len    = format.Length;

            while (true)
            {
                char c = format[currentPos];

                if (c == '{')
                {
                    if (inside)
                    {
                        FormatError();
                    }
                    else if (currentPos < (len - 1) && format[currentPos + 1] == '{') //escape char
                    {
                        sbResult.Append('{');
                        currentPos++;
                    }
                    else
                    {
                        fStart = currentPos;
                        inside = true;
                    }
                }
                else if (c == '}')
                {
                    if (currentPos < (len - 1) && format[currentPos + 1] == '}')
                    {
                        sbResult.Append('}');
                        currentPos++;
                    }
                    else
                    {
                        if (!inside)
                        {
                            FormatError();
                        }
                        inside = false;
                        string name = sbItem.ToString();
                        Console.WriteLine(name);

                        sbItem.Clear();

                        sbResult.Append(EvaluateParameter(name, model));
                    }
                }
                else
                {
                    if (inside)
                    {
                        sbItem.Append(c);
                    }
                    else
                    {
                        sbResult.Append(c);
                    }
                }

                currentPos++;
                if (currentPos == format.Length)
                {
                    break;
                }
            }

            if (inside)
            {
                FormatError();
            }

            return(sbResult.ToString());
        }