Skip to content

New RowIds feature and select column storage across data refresh #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Nov 12, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Griddly.Mvc/GriddlyButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class GriddlyButton
public string Target { get; set; }
public string ConfirmMessage { get; set; }
public bool AlignRight { get; set; }
public string[] RowIds { get; set; }

public GriddlyButtonAction Action { get; set; }

Expand Down
4 changes: 2 additions & 2 deletions Griddly.Mvc/GriddlyColumn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public abstract class GriddlyColumn

public GriddlyFilter Filter { get; set; }

public abstract HtmlString RenderCell(object row, bool encode = true);
public abstract HtmlString RenderCell(object row, GriddlySettings settings, bool encode = true);
public abstract object RenderCellValue(object row, bool stripHtml = false);
public abstract string RenderClassName(object row, GriddlyResultPage page);

Expand Down Expand Up @@ -86,7 +86,7 @@ public override string RenderClassName(object row, GriddlyResultPage page)
return null;
}

public override HtmlString RenderCell(object row, bool encode = true)
public override HtmlString RenderCell(object row, GriddlySettings settings, bool encode = true)
{
object value = null;

Expand Down
38 changes: 31 additions & 7 deletions Griddly.Mvc/GriddlySelectColumn.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;

Expand All @@ -8,19 +11,40 @@ public class GriddlySelectColumn : GriddlyColumn
{
public GriddlySelectColumn()
{
ClassName = "griddly-select";
ClassName = "griddly-select align-center";
}

public Func<object, object> Id { get; set; }

public override HtmlString RenderCell(object row, bool encode = true)

public override HtmlString RenderCell(object row, GriddlySettings settings, bool encode = true)
{
TagBuilder input = new TagBuilder("input");

input.Attributes["name"] = "_rowselect";
input.Attributes["value"] = Id(row).ToString();
input.Attributes["type"] = "checkbox";

if (settings.RowIds.Any())
{
bool valueSet = false;
string key = "";
foreach (var x in settings.RowIds)
{
string val = "";
object result = x.Value(row);
if (result != null)
val = result.ToString();

input.Attributes["data-" + x.Key] = val;
key += "_" + val;

if (!valueSet)
{
input.Attributes["value"] = val;
valueSet = true;
}
}

input.Attributes["data-rowkey"] = key;
}

return new HtmlString(input.ToString(TagRenderMode.SelfClosing));
}

Expand All @@ -31,7 +55,7 @@ public override object RenderCellValue(object row, bool stripHtml = false)

public override string RenderClassName(object row, GriddlyResultPage page)
{
return null;
return ClassName;
}
}
}
92 changes: 80 additions & 12 deletions Griddly.Mvc/GriddlySettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public abstract class GriddlySettings
public static HtmlString BoolFalseHtml = null;
public static int? DefaultPageSize = null;
public static bool DefaultShowFilterInitially = true;
public static bool DefaultShowRowSelectCount = true;

public static Func<GriddlyButton, object> IconTemplate = null;
public static Func<GriddlyResultPage, object> DefaultFooterTemplate = null;
Expand All @@ -30,23 +31,29 @@ public abstract class GriddlySettings
public GriddlySettings()
{
IdProperty = "Id";
HasInlineFilter = true;

Columns = new List<GriddlyColumn>();
Filters = new List<GriddlyFilter>();
Buttons = new List<GriddlyButton>();
RowIds = new Dictionary<string, Func<object, object>>();

ClassName = DefaultClassName;
TableClassName = DefaultTableClassName;
FooterTemplate = DefaultFooterTemplate;
PageSize = DefaultPageSize;
ShowFilterInitially = DefaultShowFilterInitially;
HasInlineFilter = true;
ShowRowSelectCount = DefaultShowRowSelectCount;
}

public string[] DefaultRowIds { get; set; }
public string IdProperty { get; set; }
public string Title { get; set; }
public string ClassName { get; set; }
public string TableClassName { get; set; }
public string OnClientRefresh { get; set; }
public bool ShowFilterInitially { get; set; }
public bool ShowRowSelectCount { get; set; }

public int? PageSize { get; set; }
public int? MaxPageSize { get; set; }
Expand All @@ -68,6 +75,8 @@ public GriddlySettings()

public bool HasInlineFilter { get; set; }

public Dictionary<string, Func<object, object>> RowIds { get; protected set; }

public virtual bool HasRowClickUrl
{
get { return RowClickUrl != null; }
Expand All @@ -88,6 +97,19 @@ public virtual object RenderRowClass(object o)
return RowClass(o);
}

public GriddlySettings RowId(Expression<Func<object, object>> expression, string name = null)
{
if (name == null)
{
var meta = ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary<object>());
name = ExpressionHelper.GetExpressionText(expression);
}

RowIds[name ?? "id"] = expression.Compile();

return this;
}

public GriddlySettings Add(GriddlyColumn column, Func<GriddlyColumn, GriddlyFilter> filter = null)
{
if (filter != null)
Expand Down Expand Up @@ -125,7 +147,7 @@ public GriddlySettings Add(GriddlyButton button)
});
}*/

public GriddlySettings Button(Func<object, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null)
public GriddlySettings Button(Func<object, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null, string[] rowIds = null)
{
if (enableOnSelection == null)
enableOnSelection = (action == GriddlyButtonAction.Ajax || action == GriddlyButtonAction.AjaxBulk || action == GriddlyButtonAction.Post);
Expand All @@ -137,13 +159,14 @@ public GriddlySettings Button(Func<object, object> argumentTemplate, string capt
Icon = icon,
Action = action,
EnableOnSelection = enableOnSelection.Value,
Target = target
Target = target,
RowIds = rowIds
};

return Add(button);
}

public GriddlySettings Button(string argument, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null)
public GriddlySettings Button(string argument, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null, string[] rowIds = null)
{
if (enableOnSelection == null)
enableOnSelection = (action == GriddlyButtonAction.Ajax || action == GriddlyButtonAction.AjaxBulk || action == GriddlyButtonAction.Post);
Expand All @@ -155,7 +178,8 @@ public GriddlySettings Button(string argument, string caption, string icon = nul
Icon = icon,
Action = action,
EnableOnSelection = enableOnSelection.Value,
Target = target
Target = target,
RowIds = rowIds
};

return Add(button);
Expand All @@ -169,11 +193,26 @@ public GriddlySettings ButtonSeparator()
});
}

public GriddlySettings SelectColumn(Func<object, object> id)
public GriddlySettings SelectColumn(Expression<Func<object, object>> id, object summaryValue = null)
{
RowId(id, "id");

return Add(new GriddlySelectColumn()
{
Id = id
SummaryValue = summaryValue
});
}

public GriddlySettings SelectColumn(Dictionary<string, Func<object, object>> ids, object summaryValue = null)
{
foreach (var x in ids)
{
RowIds[x.Key] = x.Value;
}

return Add(new GriddlySelectColumn()
{
SummaryValue = summaryValue
});
}

Expand Down Expand Up @@ -242,6 +281,19 @@ public class GriddlySettings<TRow> : GriddlySettings
base.RowClass = null;
}
}

public GriddlySettings<TRow> RowId(Expression<Func<TRow, object>> expression, string name = null)
{
if (name == null)
{
var meta = ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary<TRow>());
name = ExpressionHelper.GetExpressionText(expression);
}

RowIds[name ?? "id"] = (x) => expression.Compile()((TRow)x);

return this;
}

public GriddlySettings<TRow> Column<TProperty>(Expression<Func<TRow, TProperty>> expression, string caption = null, string format = null, string expressionString = null, SortDirection? defaultSort = null, string className = null, bool isExportOnly = false, string width = null, SummaryAggregateFunction? summaryFunction = null, object summaryValue = null, Func<TRow, object> template = null, Func<GriddlyColumn, GriddlyFilter> filter = null)
{
Expand Down Expand Up @@ -330,26 +382,42 @@ public GriddlySettings<TRow> Column(string caption = null, string format = null,
// return this;
//}

public GriddlySettings<TRow> SelectColumn(Func<TRow, object> id, object summaryValue = null)
public GriddlySettings<TRow> SelectColumn(Expression<Func<TRow, object>> id, object summaryValue = null)
{
RowId(id, "id");

Add(new GriddlySelectColumn()
{
Id = (x) => id((TRow)x),
ClassName = "align-center",
SummaryValue = summaryValue
});

return this;
}

public GriddlySettings<TRow> Button<TModel>(Func<TModel, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate)
public GriddlySettings<TRow> SelectColumn(Dictionary<string, Func<TRow, object>> ids, object summaryValue = null)
{
foreach (var x in ids)
{
RowIds[x.Key] = (z) => x.Value((TRow)z);
}

Add(new GriddlySelectColumn()
{
SummaryValue = summaryValue
});

return this;
}

public GriddlySettings<TRow> Button<TModel>(Func<TModel, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, string[] rowIds = null)
{
Add(new GriddlyButton()
{
ArgumentTemplate = (x) => argumentTemplate((TModel)x),
Text = caption,
Icon = icon,
Action = action
Action = action,
RowIds = rowIds
});

return this;
Expand Down
4 changes: 3 additions & 1 deletion Griddly/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,14 +115,16 @@ static List<TestGridItem> BuildTestData()
{
items.Add(new TestGridItem()
{
Id = (long)i,
FirstName = Name.GetFirstName(),
LastName = Name.GetLastName(),
Company = Company.GetName(),
Address = r.Next(short.MaxValue) + " " + Address.GetStreetName(),
City = Address.GetCity(),
State = Address.GetUSState(),
PostalCode = Address.GetZipCode(),
Test = (decimal)(r.NextDouble() * 10000)
Test = (decimal)(r.NextDouble() * 10000),
NullThing = (string)null,
});
}

Expand Down
2 changes: 2 additions & 0 deletions Griddly/Models/TestGridItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ namespace Griddly.Models
{
public class TestGridItem
{
public long? Id { get; set; }
public decimal? Test { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
Expand All @@ -12,6 +13,7 @@ public class TestGridItem
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string NullThing { get; set; }

public int PostalCodePrefix
{
Expand Down
Loading