Skip to content

Commit d91d356

Browse files
committed
Merge pull request #57 from jandic/master
Default column sort order and mRender implementation
2 parents 2fd5a7e + b88d8d6 commit d91d356

File tree

7 files changed

+52
-10
lines changed

7 files changed

+52
-10
lines changed

Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,10 @@ public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
5151

5252
public class UserView
5353
{
54+
[DataTables(SortDirection = SortDirection.Ascending)]
5455
public int Id { get; set; }
5556

56-
[DataTables( DisplayName = "Full Name")]
57+
[DataTables(DisplayName = "Full Name", MRenderFunction = "test")]
5758
public string Name { get; set; }
5859

5960

Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,17 @@ public class SomeController : Controller
8686
}.ToJsonString();
8787
}
8888
}
89+
90+
<script type="text/javascript">
91+
function test(data, type, full) {
92+
return '<i>' + data + '</i>';
93+
}
94+
</script>
8995
@Html.Partial("DataTable", vm)
9096

9197
<br />
9298

9399

94-
95-
96-
97100
<div>
98101
@if (Request.QueryString["lang"] != "de")
99102
{

Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
}
3636
var $table = $('#@Model.Id');
3737
var dt = $table.dataTable({
38+
"aaSorting": @Html.Raw(Model.ColumnSortingString),
3839
"bProcessing": true,
3940
"bStateSave": @Html.Raw(Model.StateSave ? "true" : "false"),
4041
"bServerSide": true,

Mvc.JQuery.Datatables.sln.DotSettings.user

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
<s:Boolean x:Key="/Default/Housekeeping/SolutionSettingsUpgraded/IsUpgraded/@EntryValue">True</s:Boolean>
66
<s:Boolean x:Key="/Default/Housekeeping/UnitTestingMru/UnitTestSessionPersistentData/=98F4BC003F814C2BA87B6120AD0009E9/@KeyIndexDefined">True</s:Boolean>
77
<s:String x:Key="/Default/Housekeeping/UnitTestingMru/UnitTestSessionPersistentData/=98F4BC003F814C2BA87B6120AD0009E9/Name/@EntryValue">ThingsAreCalledCorrectly</s:String>
8-
<s:String x:Key="/Default/Housekeeping/UnitTestingMru/UnitTestSessionPersistentData/=98F4BC003F814C2BA87B6120AD0009E9/XmlSerializedElements/@EntryValue">&lt;Session&gt;&lt;Elements&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.EntityFramework" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.FilterTests" MethodName="SearchQueryTests" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^123$&amp;quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^456$&amp;quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^Ched&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^Cheddar&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^Cheddar$&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^False$&amp;quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^True$&amp;quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;123&amp;quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;456&amp;quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;asdf&amp;quot;,System.String,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;Cheddar&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;False&amp;quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;True&amp;quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;/Elements&gt;&lt;/Session&gt;</s:String></wpf:ResourceDictionary>
8+
<s:String x:Key="/Default/Housekeeping/UnitTestingMru/UnitTestSessionPersistentData/=98F4BC003F814C2BA87B6120AD0009E9/XmlSerializedElements/@EntryValue">&lt;Session&gt;&lt;Elements&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.EntityFramework" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.FilterTests" MethodName="SearchQueryTests" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^123$&amp;quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^456$&amp;quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^False$&amp;quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^Ched&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^Cheddar&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^Cheddar$&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;^True$&amp;quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;123&amp;quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;456&amp;quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;asdf&amp;quot;,System.String,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;False&amp;quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;Cheddar&amp;quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&amp;quot;True&amp;quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /&gt;&lt;/Elements&gt;&lt;/Session&gt;</s:String></wpf:ResourceDictionary>

Mvc.JQuery.Datatables/DataTableConfigVm.cs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ public class ColDef
1515
public bool Sortable { get; set; }
1616
public Type Type { get; set; }
1717
public bool Searchable { get; set; }
18+
public SortDirection SortDirection { get; set; }
19+
public string MRenderFunction { get; set; }
1820

19-
public static ColDef Create(string name, string p1, Type propertyType, bool visible = true, bool sortable = true)
21+
public static ColDef Create(string name, string p1, Type propertyType, bool visible = true, bool sortable = true, SortDirection sortDirection = SortDirection.None, string mRenderFunction = null)
2022
{
21-
return new ColDef() {Name = name, DisplayName = p1, Type = propertyType, Visible = visible, Sortable = sortable};
23+
return new ColDef() {Name = name, DisplayName = p1, Type = propertyType, Visible = visible, Sortable = sortable, SortDirection = sortDirection, MRenderFunction = mRenderFunction };
2224
}
2325
}
2426
public class DataTableConfigVm
@@ -107,6 +109,14 @@ public string Dom
107109
}
108110
}
109111

112+
public string ColumnSortingString
113+
{
114+
get
115+
{
116+
return convertColumnSortingToJson(Columns);
117+
}
118+
}
119+
110120
public bool ShowPageSizes { get; set; }
111121

112122
public bool StateSave { get; set; }
@@ -244,6 +254,7 @@ private static string convertColumnDefsToJson(IEnumerable<ColDef> columns)
244254
var nonSortableColumns = columns.Select((x, idx) => x.Sortable ? -1 : idx).Where( x => x > -1).ToArray();
245255
var nonVisibleColumns = columns.Select((x, idx) => x.Visible ? -1 : idx).Where(x => x > -1).ToArray();
246256
var nonSearchableColumns = columns.Select((x, idx) => x.Searchable ? -1 : idx).Where(x => x > -1).ToArray();
257+
var mRenderColumns = columns.Select((x, idx) => string.IsNullOrEmpty(x.MRenderFunction) ? new { x.MRenderFunction, Index = -1 } : new { x.MRenderFunction, Index = idx }).Where(x => x.Index > -1).ToArray();
247258

248259
var defs = new List<dynamic>();
249260

@@ -253,9 +264,24 @@ private static string convertColumnDefsToJson(IEnumerable<ColDef> columns)
253264
defs.Add(new { bVisible = false, aTargets = nonVisibleColumns });
254265
if (nonSearchableColumns.Any())
255266
defs.Add(new { bSearchable = false, aTargets = nonSearchableColumns });
267+
if (mRenderColumns.Any())
268+
foreach (var mRenderColumn in mRenderColumns)
269+
{
270+
defs.Add(new { mRender = "%" + mRenderColumn.MRenderFunction + "%", aTargets = new[] {mRenderColumn.Index} });
271+
}
272+
273+
if (defs.Count > 0)
274+
return new JavaScriptSerializer().Serialize(defs).Replace("\"%", "").Replace("%\"", "");
275+
276+
return "[]";
277+
}
278+
279+
private static string convertColumnSortingToJson(IEnumerable<ColDef> columns)
280+
{
281+
var sortList = columns.Select((c, idx) => c.SortDirection == SortDirection.None ? new dynamic[] { -1, "" } : (c.SortDirection == SortDirection.Ascending ? new dynamic[] { idx, "asc" } : new dynamic[] { idx, "desc" })).Where(x => x[0] > -1).ToArray();
256282

257-
if (defs.Count > 0)
258-
return new JavaScriptSerializer().Serialize(defs);
283+
if (sortList.Length > 0)
284+
return new JavaScriptSerializer().Serialize(sortList);
259285

260286
return "[]";
261287
}

Mvc.JQuery.Datatables/DataTablesHelper.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ public static DataTableConfigVm DataTableVm<TController, TResult>(this HtmlHelpe
4747
Sortable = pi.Item2.Sortable,
4848
Visible = pi.Item2.Visible,
4949
Searchable = pi.Item2.Searchable,
50-
Type = pi.Item1.PropertyType
50+
Type = pi.Item1.PropertyType,
51+
SortDirection = pi.Item2.SortDirection,
52+
MRenderFunction = pi.Item2.MRenderFunction
5153
});
5254
}
5355
columns = columnList.ToArray();

Mvc.JQuery.Datatables/DataTablesTypeInfo.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,16 @@ public DataTablesAttribute()
5656
public bool Sortable { get; set; }
5757
public int? Order { get; set; }
5858
public string DisplayName { get; set; }
59+
public SortDirection SortDirection { get; set; }
60+
public string MRenderFunction { get; set; }
5961

6062
public bool Visible { get; set; }
6163
}
64+
65+
public enum SortDirection
66+
{
67+
None,
68+
Ascending,
69+
Descending
70+
}
6271
}

0 commit comments

Comments
 (0)