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
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 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"); } } }
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
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 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
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 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 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); } } } }
bon alors ... il se passe quoi ?
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()
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" :
Du coup, rien le marche :/
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
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 ^^.
Partager