Search code examples
asp.net-mvc-3webgrid

MVC3 WebGrid - Creating Columns Dynamically (foreach?)


I want to create a WebGrid with columns based on a collection, such as List. Something like this (which obviously doesn't work):

@grid.GetHtml(
  columns: grid.Columns(
    @foreach (var column in Model.ListOfColumns) {
       grid.Column(column.Name, column.Title);
    }
  )
)          

Any clever ideas?


Solution

  • You could ViewBag it like below.

    Controller:

            List<WebGridColumn> columns = new List<WebGridColumn>();
            columns.Add(new WebGridColumn() { ColumnName = "Id", Header = "Id" });
            columns.Add(new WebGridColumn() { ColumnName = "Name", Header = "Name" });
            columns.Add(new WebGridColumn() { ColumnName = "Location", Header = "Location" });
            columns.Add(new WebGridColumn() { Format = (item) => { return new HtmlString(string.Format("<a href= {0}>View</a>", Url.Action("Edit", "Edit", new { Id = item.Id }))); } });
            ViewBag.Columns = columns;
    

    View:

       @grid.GetHtml(tableStyle: "ui-widget ui-widget-content",
                          headerStyle: "ui-widget-header",
                          columns: ViewBag.Columns
                         )