This is a migrated thread and some comments may be shown as answers.

[Solved] can grid bind to dictionary?

0 Answers 45 Views
Grid
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Luo
Top achievements
Rank 1
Luo asked on 25 Dec 2011, 04:18 PM

Hi all

Properties and fields for Order can not be known in advance, so I used a dictionary and Indexer, but I can not bind to the grid. Error message: Invalid property or field - 'id' for type: Order

Does anybody have an idea how I can solve this?

Any help is appreciated.

Thanks

ljs@bill-jc.com,  Luojinsong

Model:

{
    public Dictionary<string, object> Data = new Dictionary<string, object>();
 
    public object this[string columnName]
    {
        get
        {
            object temp;
            if (Data.TryGetValue(columnName, out temp) == true)
            {
                return temp;
            }
            return null;
        }
        set
        {
            if (Data.ContainsKey(columnName) == true)
                Data.Remove(columnName);
            Data.Add(columnName, value);
        }
    }
}

 ViewModel:  

public class OrdersViewModel
    {
        public List<Order> Data = new List<Order>();
        public IEnumerable<GridColumnSettings> Columns { get; set; }
    }

Controller:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
 
            OrdersViewModel model = new OrdersViewModel();
 
            Order order1 = new Order();
            order1.Data.Add("id", "1");
            order1.Data.Add("customer", "customer1");
            order1.Data.Add("qty", "100");
            model.Data.Add(order1);
 
            Order order2 = new Order();
            order2.Data.Add("id", "2");
            order2.Data.Add("customer", "customer2");
            order2.Data.Add("qty", "200");
            model.Data.Add(order2);
 
            model.Columns = this.columns();
 
            return View(model);
        }
 
        public ActionResult About()
        {
            return View();
        }
 
 
        public List<GridColumnSettings> columns()
        {
            List<GridColumnSettings> columns = new List<GridColumnSettings>();
 
            GridColumnSettings columnSettings;
 
            columnSettings = new GridColumnSettings();
            columnSettings.Member = "id";
            columnSettings.Title = "id";
            columnSettings.MemberType = typeof(String);
            columns.Add(columnSettings);
 
            columnSettings = new GridColumnSettings();
            columnSettings.Member = "customer";
            columnSettings.Title = "customer";
            columnSettings.MemberType = typeof(String);
            columns.Add(columnSettings);
 
            columnSettings = new GridColumnSettings();
            columnSettings.Member = "qty";
            columnSettings.Title = "qty";
            columnSettings.MemberType = typeof(int);
            columns.Add(columnSettings);
 
            return columns;
        }
    }

 

View:

@model TelerikMvcApplication1.ViewModels.OrdersViewModel
@{
    ViewBag.Title = "Home Page";
}
 
<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc<;/a>.
</p>
 
@(
 Html.Telerik().Grid(Model.Data.AsEnumerable())
                .Name("Grid")
                .Columns(columns =>
                {
                    columns.LoadSettings(Model.Columns as IEnumerable<GridColumnSettings>);
                })
            .Reorderable(resizing => resizing.Columns(true))
            .Resizable(resizing => resizing.Columns(true))
            .Groupable(grouping => grouping.Enabled((bool)true))
            .Sortable()
            .Groupable()
            .Footer(true)
            )

 

 
Tags
Grid
Asked by
Luo
Top achievements
Rank 1
Share this question
or