Bonsoir.
ça fait 2 jours que je bloque sur la création d'une grille avec DevExpress :/.
Ma grille s'affiche, mais il m'est impossible d'effectuer des actions de base.

mon controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
using LivDevis.ClassLibrary;
using LivDevis.ClassLibrary.Classes;
using LivDevis.ClassLibrary.Entities;
using LivDevis.Filters;
using LivDevis.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
 
namespace LivDevis.Controllers
{
    [AuthorizeAuthentificated]
    public partial class CustomerController : DevExpressController
    {
        public override string ControllerName { get { return "Customer"; } }
 
        public ActionResult IndividualCustomerList()
        {
            return DevExpressView("IndividualCustomerList");
        }
    }
}
la seconde partie de mon controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using DevExpress.Data;
using DevExpress.Web.Mvc;
using LivDevis.Helpers;
using LivDevis.Models;
using LivDevis.Models.DevExpress;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace LivDevis.Controllers
{
    public partial class CustomerController : DevExpressController
    {
        public ActionResult IndividualCustomerList_Partial()
        {
            DevExpress.Web.Mvc.GridViewModel gridView = GridViewExtension.GetViewModel("GridViewIndividualCustomerList");
            if (gridView == null)
            {
                gridView = CreateGridViewModel();
            }
            return IndividualCustomerList_Core(gridView);
        }
 
        /****************************************************************************************************
         * Editing
         ***************************************************************************************************/
        public ActionResult EditingDelete(Guid CustomerID)
        {
            DevExpressIndividualCustomerModel.Delete(CustomerID);
            return RedirectToAction("IndividualCustomerList");
        }
 
        /****************************************************************************************************
         * Events
         ***************************************************************************************************/
        // Paging
        public ActionResult IndividualCustomerList_Paging(GridViewPagerState pager)
        {
            DevExpress.Web.Mvc.GridViewModel gridView = GridViewExtension.GetViewModel("GridViewIndividualCustomerList");
            gridView.Pager.Assign(pager);
            return IndividualCustomerList_Core(gridView);
        }
 
        // Filtering
        public ActionResult IndividualCustomerList_Filtering(GridViewColumnState column)
        {
            DevExpress.Web.Mvc.GridViewModel gridView = GridViewExtension.GetViewModel("GridViewIndividualCustomerList");
            gridView.Columns[column.FieldName].Assign(column);
            return IndividualCustomerList_Core(gridView);
        }
 
        // Sorting
        public ActionResult IndividualCustomerList_Sorting(GridViewColumnState column, bool reset)
        {
            DevExpress.Web.Mvc.GridViewModel gridView = GridViewExtension.GetViewModel("GridViewIndividualCustomerList");
            gridView.SortBy(column, reset);
            return IndividualCustomerList_Core(gridView);
        }
 
        // Grouping
        public ActionResult IndividualCustomerList_Grouping(GridViewColumnState column)
        {
            DevExpress.Web.Mvc.GridViewModel gridView = GridViewExtension.GetViewModel("GridViewIndividualCustomerList");
            gridView.Columns[column.FieldName].Assign(column);
            return IndividualCustomerList_Core(gridView);
        }
 
        PartialViewResult IndividualCustomerList_Core(DevExpress.Web.Mvc.GridViewModel gridView)
        {
            DevExpressIndividualCustomerModel.SetModel();
 
            gridView.ProcessCustomBinding(
                DevExpressIndividualCustomerModel.GetDataRowCount,
                DevExpressIndividualCustomerModel.GetData,
                DevExpressIndividualCustomerModel.GetSummaryValues,
                DevExpressIndividualCustomerModel.GetGroupingInfo,
                DevExpressIndividualCustomerModel.GetUniqueHeaderFilterValues
            );
            return PartialView("DevExpress.Customer.IndividualCustomerList_Partial", gridView);
        }
 
        static DevExpress.Web.Mvc.GridViewModel CreateGridViewModel()
        {
            DevExpress.Web.Mvc.GridViewModel gridView = new DevExpress.Web.Mvc.GridViewModel();
            gridView.KeyFieldName = "Customer_CustomerID";
            gridView.Columns.Add("IndividualCustomer_FirstName");
            gridView.Columns.Add("IndividualCustomer_LastName");
            gridView.Pager.PageSize = 50;
            gridView.TotalSummary.Add(new GridViewSummaryItemState() { FieldName = "IndividualCustomer_FirstName", SummaryType = SummaryItemType.Count });
            return gridView;
        }
    }
}
Ma classe personnalisée GridViewModel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
using DevExpress.Data;
using DevExpress.Data.Filtering;
using DevExpress.Data.Linq;
using DevExpress.Data.Linq.Helpers;
using DevExpress.Web.Mvc;
 
using LivDevis.Helpers;
 
using LivDevis.ClassLibrary.Entities;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
 
namespace LivDevis.Models.DevExpress
{
    public class GridViewModel
    {
        public static IQueryable Model { get; set; }
 
        public static void GetDataRowCount(GridViewCustomBindingGetDataRowCountArgs e)
        {
            e.DataRowCount = Model.ApplyFilter(e.FilterExpression)
                                    .Count();
        }
 
        public static void GetData(GridViewCustomBindingGetDataArgs e)
        {
            IQueryable keys = Model.ApplyFilter(e.State.FilterExpression)
                                    .ApplyFilter(e.GroupInfoList)
                                    .ApplySorting(e.State.SortedColumns)
                                    .Skip(e.StartDataRowIndex)
                                    .Take(e.DataRowCount)
                                    .Select(e.State.KeyFieldName);
 
            if (keys.Count() != 0)
            {
                e.Data = Model.ApplyFilter(new InOperator(e.State.KeyFieldName, keys).ToString());
            }
        }
 
        public static void GetSummaryValues(GridViewCustomBindingGetSummaryValuesArgs e)
        {
            IQueryable query = Model.ApplyFilter(e.State.FilterExpression)
                                    .ApplyFilter(e.GroupInfoList);
 
            ArrayList list = new ArrayList();
            foreach (GridViewSummaryItemState item in e.SummaryItems)
            {
                switch (item.SummaryType)
                {
                    case SummaryItemType.Count:
                        list.Add(query.Count());
                    break;
 
                    case SummaryItemType.Sum:
                        list.Add(query.Sum(item.FieldName));
                    break;
                }
            }
 
            e.Data = list;
        }
 
        public static void GetGroupingInfo(GridViewCustomBindingGetGroupingInfoArgs e)
        {
            e.Data = Model.ApplyFilter(e.State.FilterExpression)
                            .ApplyFilter(e.GroupInfoList)
                            .GetGroupInfo(e.FieldName, e.SortOrder);
        }
 
        public static void GetUniqueHeaderFilterValues(GridViewCustomBindingGetUniqueHeaderFilterValuesArgs e)
        {
            e.Data = Model.ApplyFilter(e.FilterExpression)
                            .UniqueValuesForField(e.FieldName);
        }
    }
}
ma classe Customer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
using DevExpress.Data;
using DevExpress.Data.Filtering;
using DevExpress.Data.Linq;
using DevExpress.Data.Linq.Helpers;
using DevExpress.Web.Mvc;
 
using LivDevis.Helpers;
 
using LivDevis.ClassLibrary.Entities;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
 
namespace LivDevis.Models.DevExpress
{
    public class DevExpressIndividualCustomerModel : LivDevis.Models.DevExpress.GridViewModel
    {
        public static void SetModel()
        {
            List<IndividualCustomerModel> _Customers = new List<IndividualCustomerModel>();
 
            foreach (IndividualCustomer CustomerDB in IndividualCustomer.GetList())
            {
                IndividualCustomerModel _Customer = new IndividualCustomerModel();
                _Customer.GetRecord(CustomerDB);
                _Customers.Add(_Customer);
            }
 
            Model = _Customers.AsQueryable<IndividualCustomerModel>();
        }
 
        public static void Delete(Guid CustomerID)
        {
            IndividualCustomer CustomerDB = IndividualCustomer.Get(CustomerID);
            if (CustomerDB != null)
            {
                IndividualCustomer.Delete(CustomerDB);
            }
        }
    }
}
ma vue partielle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
@using LivDevis.Helpers
 
@Html.DevExpress().GridView(
    settings => {
        settings.Name = "GridViewIndividualCustomerList";
        settings.CallbackRouteValues = new { Controller = "Customer", Action = "IndividualCustomerList_Partial" };
        settings.Width = Unit.Pixel(840);
 
        /****************************************************************************************************
         * Paging, Filtering, Sorting, Grouping
         ***************************************************************************************************/
        settings.CustomBindingRouteValuesCollection.Add(
            GridViewOperationType.Paging,
            new { Controller = "Customer", Action = "IndividualCustomerList_Paging" }
        );
 
        settings.CustomBindingRouteValuesCollection.Add(
            GridViewOperationType.Filtering,
            new { Controller = "Customer", Action = "IndividualCustomerList_Filtering" }
        );
 
        settings.CustomBindingRouteValuesCollection.Add(
            GridViewOperationType.Sorting,
            new { Controller = "Customer", Action = "IndividualCustomerList_Sorting" }
        );
 
        settings.CustomBindingRouteValuesCollection.Add(
            GridViewOperationType.Grouping,
            new { Controller = "Customer", Action = "IndividualCustomerList_Grouping" }
        );
 
        /* Properties */
        settings.KeyFieldName = "Customer_CustomerID";
 
        settings.Settings.ShowFilterRow = true;
        settings.Settings.ShowGroupPanel = true;
        settings.Settings.ShowFooter = true;
        settings.SettingsBehavior.AllowFocusedRow = true;
 
        settings.Settings.HorizontalScrollBarMode = ScrollBarMode.Hidden;
        settings.Settings.VerticalScrollBarMode = ScrollBarMode.Visible;
        settings.Settings.VerticalScrollableHeight = 400;
        settings.SettingsPager.PageSize = 50;
        settings.SettingsPager.Position = PagerPosition.TopAndBottom;
        settings.SettingsPager.FirstPageButton.Visible = true;
        settings.SettingsPager.LastPageButton.Visible = true;
        settings.SettingsPager.PageSizeItemSettings.Visible = true;
        settings.SettingsPager.PageSizeItemSettings.ShowPopupShadow = true;
        settings.SettingsPager.PageSizeItemSettings.Items = new string[] { "50", "100", "200" };
 
        /****************************************************************************************************
         * Columns
         ***************************************************************************************************/
        settings.Columns.Add(column =>
        {
            column.SetDataItemTemplateContent(c =>
            {
                ViewContext.Writer.Write(
                    Html.ActionLink(LivDevis.Resources.Views.DevExpress.GridView.DisplayDeleting, "EditingDelete", new { CustomerID = DataBinder.Eval(c.DataItem, "Customer_CustomerID") },
                        new { onclick = "return confirm('Do you really want to delete this record?')" })
                );
            });
            column.Settings.AllowDragDrop = DefaultBoolean.False;
            column.Settings.AllowSort = DefaultBoolean.False;
            column.Width = Unit.Pixel(100);
        });
 
        settings.Columns.Add(column => {
            column.FieldName = "IndividualCustomer_FirstName";
            column.Caption = LivDevis.Resources.Models.CustomerModel.DisplayFirstName;
            column.ColumnType = MVCxGridViewColumnType.TextBox;
            column.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
        });
 
        settings.Columns.Add(column => {
            column.FieldName = "IndividualCustomer_LastName";
            column.Caption = LivDevis.Resources.Models.CustomerModel.DisplayLastName;
            column.ColumnType = MVCxGridViewColumnType.TextBox;
            column.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
        });
 
        settings.TotalSummary.Add(DevExpress.Data.SummaryItemType.Count, "IndividualCustomer_FirstName");
 
        /****************************************************************************************************
         * Events
         ***************************************************************************************************/
        settings.ClientSideEvents.Init = "function(s, e) { s.PerformCallback(); }";
    }).BindToCustomData(Model).GetHtml()
bon alors ... il se passe quoi ?
ma grille s'affiche avec des informations, jusque là c'est niquel. Mais après les choses se corcent !
lorsque je saisie des données dans les champs texte pour une recherche dans ma grille, voilà le contenu que j'obtiens dans mon objet "GridViewColumnState column" dans "IndividualCustomerList_Filtering" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
FieldName = ""
FIlterExpression = null
GroupIndex = -1
SortIndex = -1
SortOrder = None
Du coup, rien le marche :/

Lorsque j'utilise la pagination avec a liste déroulante pour choisir le nombre réponses par page, la valeur que j'obtiens dans mon objet "GridViewPagerState pager" reste toujours 10 (valeur par défaut semble t'il).

Je ne vois pas où est mon erreur. Je commence à craindre une incompatibilité entre la dernière version de DevExpress et les versions récentes de jQuery !!
Svp, dites-moi que ce n'est pas ça, car ce ne serait pas bon pour moi ^^.