Popup Column Picker

You can easily implement a column-picker UI by using the grid's columns property, a ListBox control, and C1 MVC's showPopup and hidePopup methods.

For example, the grid below loads with an auto-generated set of columns. Click the gear icon at the top-left cell to show a ListBox where you can select the columns you want to display.

Id
Start
End
Country
Product
Color
Country Id
Product Id
Color Id
Amount1
Amount2
Amount3
Amount4
Amount5
Discount
Active
0
1/25/2025
1/25/2025
US
Widget
Black
0
0
0
4,036.22
-3,977.61
-1,712.01
160.99
2,798.08
0.24
1
2/25/2025
2/25/2025
Greece
Doohickey
Black
5
3
0
738.94
1,930.52
4,071.70
4,581.86
-4,092.69
0.10
2
3/25/2025
3/25/2025
Italy
Sprocket
Red
4
1
2
-1,210.42
-4,128.40
-1,338.58
-2,701.31
1,898.79
0.15
3
4/25/2025
4/25/2025
Italy
Doohickey
Red
4
3
2
4,962.28
2,446.28
3,805.08
3,218.35
-4,085.94
0.24
4
5/25/2025
5/25/2025
US
Sprocket
Red
0
1
2
1,193.64
-1,763.54
4,693.72
-1,240.51
4,478.94
0.14
5
6/25/2025
6/25/2025
Germany
Widget
White
1
0
1
3,558.35
2,037.89
4,061.70
-1,405.03
-1,995.81
0.02
6
7/25/2025
7/25/2025
US
Sprocket
White
0
1
1
4,224.48
2,355.37
2,621.11
3,445.62
-3,533.61
0.02
7
8/25/2025
8/25/2025
Japan
Widget
White
3
0
1
1,609.65
-404.37
3,121.71
2,261.19
4,754.29
0.20
8
9/25/2025
9/25/2025
UK
Sprocket
Green
2
1
3
-3,759.09
-70.44
-4,234.33
-3,000.83
-2,589.65
0.02
9
10/25/2025
10/25/2025
US
Doohickey
White
0
3
1
-3,956.91
-64.51
-288.57
-3,378.55
-3,111.65
0.06
10
11/25/2025
11/25/2025
Japan
Gadget
Red
3
2
2
3,907.46
-1,422.85
3,553.12
559.63
2,625.64
0.08
11
12/25/2025
12/25/2025
Japan
Doohickey
Black
3
3
0
-3,876.41
3,913.80
4,431.08
-1,329.27
-1,687.11
0.23
12
1/25/2025
1/25/2025
Japan
Gadget
Black
3
2
0
3,698.85
-2,594.12
-4,117.44
4,407.40
1,477.00
0.02
13
2/25/2025
2/25/2025
Greece
Doohickey
White
5
3
1
3,983.09
2,811.86
-3,295.22
425.20
4,559.56
0.12
14
3/25/2025
3/25/2025
US
Doohickey
Red
0
3
2
697.61
-2,703.05
-352.84
3,318.80
3,255.00
0.18

You can use the grid's columnLayout property to allow users to save and restore column layouts. Click the buttons below to see how this works.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// This file locates: "Scripts/Lesson/C1Mvc/WijmoShowPopup.js".
c1.documentReady(function () {
    // generate some random data
    var data = [],
      countries = ['US', 'Germany', 'UK', 'Japan', 'Italy', 'Greece'],
      products = ['Widget', 'Sprocket', 'Gadget', 'Doohickey'],
      colors = ['Black', 'White', 'Red', 'Green', 'Blue'],
      dt = new Date();
    for (var i = 0; i < 100; i++) {
        var date = new Date(dt.getFullYear(), i % 12, 25, i % 24, i % 60, i % 60),
          countryId = Math.floor(Math.random() * countries.length),
          productId = Math.floor(Math.random() * products.length),
          colorId = Math.floor(Math.random() * colors.length);
        var item = {
            id: i,
            start: date,
            end: date,
            country: countries[countryId],
            product: products[productId],
            color: colors[colorId],
            countryId: countryId,
            productId: productId,
            colorId: colorId,
            amount1: Math.random() * 10000 - 5000,
            amount2: Math.random() * 10000 - 5000,
            amount3: Math.random() * 10000 - 5000,
            amount4: Math.random() * 10000 - 5000,
            amount5: Math.random() * 10000 - 5000,
            discount: Math.random() / 4,
            active: i % 4 == 0
        };
        data.push(item);
    }
 
    var theGrid = wijmo.Control.getControl('#theGrid');
    theGrid.itemsSource = data;
    theGrid.formatItem.addHandler(function (s, e) {
        if (e.panel == s.topLeftCells) {
            e.cell.innerHTML = '<span class="column-picker-icon glyphicon glyphicon-cog"></span>';
        }
    });
 
    var theColumnPicker = wijmo.Control.getControl('#theColumnPicker');
    theColumnPicker.initialize({
        itemsSource: theGrid.columns,
        checkedMemberPath: 'visible',
        displayMemberPath: 'header',
        lostFocus: function () {
            wijmo.hidePopup(theColumnPicker.hostElement);
        }
    });
 
    // show the column picker when the user clicks the top-left cell
    var ref = theGrid.hostElement.querySelector('.wj-topleft');
    ref.addEventListener('mousedown', function (e) {
        if (wijmo.hasClass(e.target, 'column-picker-icon')) {
            wijmo.showPopup(theColumnPicker.hostElement, ref, false, true, false);
            theColumnPicker.focus();
            e.preventDefault();
        }
    });
 
    // save/restore layout buttons
    document.getElementById('btnSave').addEventListener('click', function () {
        localStorage.setItem('myLayout', theGrid.columnLayout);
    });
    document.getElementById('btnRestore').addEventListener('click', function () {
        var layout = localStorage.getItem('myLayout');
        if (layout) {
            theGrid.columnLayout = layout;
        }
    });
});
1
2
3
4
5
6
7
8
9
10
11
12
13
// This file locates: "Content/css/Lesson/C1Mvc/WijmoShowPopup.css".
.column-picker {
  columns: 3;
  padding: 12px;
  margin-left: 12px;
  margin-top: 26px;
  box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
}
.column-picker-icon {
  cursor: pointer;
  color: #FF8754;
  margin: 3px;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Web.Mvc;
 
namespace LearnMvcClient.Controllers
{
    public partial class C1MvcController : Controller
    {
        // GET: WijmoShowPopup
        public ActionResult WijmoShowPopup()
        {
            return View();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<h1>
    @Html.Raw(Resources.C1Mvc.WijmoShowPopup_Title)
</h1>
<p>
    @Html.Raw(Resources.C1Mvc.WijmoShowPopup_Text1)
</p>
<p>
    @Html.Raw(Resources.C1Mvc.WijmoShowPopup_Text2)
</p>
@Html.C1().FlexGrid().Id("theGrid").Height(300)
<div style="display:none">
    @Html.C1().ListBox().Id("theColumnPicker").CssClass("column-picker")
</div>
 
<p>
    @Html.Raw(Resources.C1Mvc.WijmoShowPopup_Text3)
</p>
<button id="btnSave" class="btn btn-default">
    @Html.Raw(Resources.C1Mvc.WijmoShowPopup_Text4)
</button>
<button id="btnRestore" class="btn btn-default">
    @Html.Raw(Resources.C1Mvc.WijmoShowPopup_Text5)
</button>