or
<
script
>
$(function () {
$("#grid").kendoGrid({
height: 600,
columns: [
{ field: "ENTITY_CATEGORY", width: "250px" },
{ field: "ENTITY_CODE", width: "250px" }
{ command: ["edit"], title:" ", width:"200px"}], //["edit","destroy"]
editable: {
mode: "popup",
confirmation: "Are you sure you want to delete this record?",
confirmDelete: "Delete",
cancelDelete: "Cancel",
template: kendo.template($("#popup_editor").html())
},
pageable: true,
sortable: true,
filterable: true,
toolbar: ["create"], // specify toolbar commands
dataSource: {
serverPaging: true,
serverFiltering: true,
serverSorting: true,
pageSize: 10,
schema: {
data: "Data",
total: "Total",
// errors : "error",
model: {
id: "ENTITY_KEY",
fields: {
ENTITY_KEY: { editable: false, nullable: true },
ENTITY_CATEGORY: { validation: { required: true } },
ENTITY_CODE: { validation: { required: true } }
}
}
},
batch: true,
transport: {
create: {
url: "@Url.Action("Create_Entity", "Load")",
type: "POST"
},
read: {
url: "@Url.Action("Read_Entity", "Load")",
contentType: "application/json",
type: "POST"
},
update: {
url:"@Url.Action("Update_Entity", "Load")",
type: "POST"
},
destroy: {
url: "@Url.Action("Destroy_Entity", "Load")",
type: "POST"
},
parameterMap: function(data, operation) {
if (operation != "read") {
var result = {};
for (var i = 0; i <
data.models.length
; i++) {
var
entity
=
data
.models[i];
for (var member in entity) {
result["newEntity[" + i + "]." + member] = entity[member];
}
}
return result;
}
else {
return JSON.stringify(data)
}
}
}
}
});
});
</script>
<
script
type
=
"text/javascript"
>
function onDataBound(e) {
var grid = $('#grid').data('kendoGrid');
// ask the parameterMap to create the request object for you
var requestObject = (new kendo.data.transports["aspnetmvc-server"]({ prefix: "" }))
.options.parameterMap({
page: grid.dataSource.page(),
sort: grid.dataSource.sort(),
filter: grid.dataSource.filter()
});
// Get the export link as jQuery object
var $exportLink = $('#export');
// Get its 'href' attribute - the URL where it would navigate to
var href = $exportLink.attr('href');
// Update the 'sort' parameter with the grid's current sort descriptor
href = href.replace(/sort=([^&]*)/, 'sort=' + requestObject.sort || '~');
//update filter descriptor with the filters applied
href = href.replace(/filter=([^&]*)/, 'filter=' + (requestObject.filter || '~'));
// Update the 'href' attribute
$exportLink.attr('href', href);
}
$(function () {
$("#export").on("click", function () {
var grid = $('#grid').data('kendoGrid');
var href = this.href;
this.href = href.replace(/columns=([^&]*)/, 'columns=' + kendo.stringify(grid.columns));
});
})
function getColumns(gridColumns) {
var columns = [];
for (var i = 0; i <
gridColumns.length
; i++) {
if (gridColumns[i].field && !gridColumns[i].hidden) {
columns.push(gridColumns[i].field)
}
}
return columns.join(",");
}
</script>
[HttpPost]
public ActionResult UpdateAttachment(int proposalID, AttachmentsViewModel vm)
{
User user = new User();
int user_id = user.GetUserIDByBNLAccount(User.Identity.Name);
if (CheckProposalReadAccess(user_id, proposalID))
{
using (var context = new PASSEntities())
{
var model = context.Proposal_Attachments.Find(vm.ID);
model.Inappropriate_Content = vm.Inappropriate_Content;
context.Entry(model).State = System.Data.EntityState.Modified;
context.SaveChanges();
return PartialView(vm);
}
}
else
{
return PartialView();
}
}
<
div
style
=
"width:800px;font-size:x-small; padding-top:40px;"
>
@(Html.Kendo().Grid<
DRS2014.Models.PathAccountCode
>()
.Name("GridRules")
.Columns(columns =>
{
columns.Bound(e => e.Id);
columns.Bound(e => e.Debtors_Account_Code).Title("Debtors<
br
/>Account<
br
/>Code");
columns.Bound(e => e.Email).Width(100);
columns.Bound(e => e.EmailConfirmed).Title("Email<
br
/>Confirmed?").Width(40);
columns.Bound(e => e.BackingReportFormat).Title("Report<
br
/>Format");
columns.Bound(e => e.BackingReportType).Title("Report<
br
/>Type");
columns.Bound(e => e.InvoiceType).Title("Invoice<
br
/>Type");
columns.Command(command => { command.Edit().Text(" "); }).Width(80);
})
.Sortable()
.Pageable()
//.Scrollable()
.ClientDetailTemplateId("detailsTemplate")
//.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
.Ajax()
.Model(m=>m.Id(p=>p.Id))
.PageSize(10)
.Read(read => read.Action("GetPathAccounts", "Admin"))
.Create(create=>create.Action("InsertPathAccount","Admin"))
.Update(update=>update.Action("UpdatePathAccount","Admin"))
.Destroy(delete=>delete.Action("DeletePathAccount","Admin"))
)
.Events(e=>e.Edit("onEdit"))
.ToolBar(commands=>commands.Create())
.Editable(editable=>editable
.Mode(GridEditMode.PopUp))
.Filterable()
)
<
br
/>
</
div
>
<
script
id
=
"detailsTemplate"
type
=
"text/kendo-tmpl"
>
@(Html.Kendo().Grid<
DRS2014.Models.PathAccountCust
>()
.Name("Data_#=Id#")
//.Events(e=>e.Edit("onEdit2"))
.Columns(columns=>
{
columns.Bound(o => o.CustGlobalCode);
columns.Bound(o => o.CustName);
columns.Bound(o => o.CustLocation);
columns.Command(command => { command.Edit().Text(" "); });
})
.ToolBar(commands=>commands.Create())
.Editable(editable=>editable
.Mode(GridEditMode.PopUp))
.DataSource(dataSource=>dataSource
.Ajax()
// .Aggregates(agg=>
//{
// agg.Add(p => p.Apportionment).Sum();
//})
.Model(m=>m.Id(x=>x.Id))
//.Events(events => events.Error("error"))
.PageSize(10)
.Read(read=>read.Action("GetPathAccountCust","Admin", new { Id = "#= Id #" }))
.Create(create=>create.Action("InsertPathAccountCust","Admin", new { Id = "#= Id #" }))
.Update(update=>update.Action("UpdatePathAccountCust","Admin"))
.Destroy(delete=>delete.Action("DeletePathAccountCust","Admin"))
)
//.Pageable(p=>p.Refresh(true))
.Sortable()
.ToClientTemplate())
</
script
>
public
ActionResult InsertPathAccountCust([DataSourceRequest] DataSourceRequest request, Models.PathAccountCust newAccountCust,
int
Id)
{
try
{
newAccountCust.AccountNoId = Id;
_PriceRepository.insertPathAccountCodeCust(newAccountCust);
return
Json(
new
[] { newAccountCust }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
}
catch
(Exception ex)
{
ModelState.AddModelError(
"ERR1"
, ex.Message);
return
Json(ModelState.ToDataSourceResult(), JsonRequestBehavior.AllowGet);
}
}
<
div
style
=
"width:800px;font-size:x-small; padding-top:40px;"
>
@(Html.Kendo().Grid<
DRS2014.Models.PathAccountCode
>()
.Name("GridRules")
.Columns(columns =>
{
columns.Bound(e => e.pId);
columns.Bound(e => e.Debtors_Account_Code).Title("Debtors<
br
/>Account<
br
/>Code");
columns.Bound(e => e.Email).Width(100);
columns.Bound(e => e.EmailConfirmed).Title("Email<
br
/>Confirmed?").Width(40);
columns.Bound(e => e.BackingReportFormat).Title("Report<
br
/>Format");
columns.Bound(e => e.BackingReportType).Title("Report<
br
/>Type");
columns.Bound(e => e.InvoiceType).Title("Invoice<
br
/>Type");
columns.Command(command => { command.Edit().Text(" "); }).Width(80);
})
.Sortable()
.Pageable()
//.Scrollable()
.ClientDetailTemplateId("detailsTemplate")
//.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
.Ajax()
.Model(m=>m.Id(p=>p.pId))
.PageSize(10)
.Read(read => read.Action("GetPathAccounts", "Admin"))
.Create(create=>create.Action("InsertPathAccount","Admin"))
.Update(update=>update.Action("UpdatePathAccount","Admin"))
.Destroy(delete=>delete.Action("DeletePathAccount","Admin"))
)
.Events(e=>e.Edit("onEdit"))
.ToolBar(commands=>commands.Create())
.Editable(editable=>editable
.Mode(GridEditMode.PopUp))
.Filterable()
)
<
br
/>
</
div
>
<
script
id
=
"detailsTemplate"
type
=
"text/kendo-tmpl"
>
@(Html.Kendo().Grid<
DRS2014.Models.PathAccountCust
>()
.Name("Data_#=pId#")
//.Events(e=>e.Edit("onEdit2"))
.Columns(columns=>
{
columns.Bound(o => o.CustGlobalCode);
columns.Bound(o => o.CustName);
columns.Bound(o => o.CustLocation);
columns.Command(command => { command.Edit().Text(" "); });
})
.ToolBar(commands=>commands.Create())
.Editable(editable=>editable
.Mode(GridEditMode.PopUp))
.DataSource(dataSource=>dataSource
.Ajax()
// .Aggregates(agg=>
//{
// agg.Add(p => p.Apportionment).Sum();
//})
.Model(m=>m.Id(x=>x.Id))
//.Events(events => events.Error("error"))
.PageSize(10)
.Read(read=>read.Action("GetPathAccountCust","Admin", new { pId = "#= pId #" }))
.Create(create=>create.Action("InsertPathAccountCust","Admin", new { pId = "#= pId #" }))
.Update(update=>update.Action("UpdatePathAccountCust","Admin"))
.Destroy(delete=>delete.Action("DeletePathAccountCust","Admin"))
)
//.Pageable(p=>p.Refresh(true))
.Sortable()
.ToClientTemplate())
</
script
>
public
ActionResult InsertPathAccountCust([DataSourceRequest] DataSourceRequest request, Models.PathAccountCust newAccountCust,
int
pId)
{
try
{
newAccountCust.AccountNoId = pId;
_PriceRepository.insertPathAccountCodeCust(newAccountCust);
return
Json(
new
[] { newAccountCust }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
}
catch
(Exception ex)
{
ModelState.AddModelError(
"ERR1"
, ex.Message);
return
Json(ModelState.ToDataSourceResult(), JsonRequestBehavior.AllowGet);
}
}
public
static
void
RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}"
);
routes.MapRoute(
name:
"Default"
,
url:
"{controller}/{action}/{id}"
,
defaults:
new
{ controller =
"Home"
, action =
"Index"
, id = UrlParameter.Optional }
);
}
@model PASS.ViewModels.Proposals.AttachmentsViewModel
<
div
class
=
"editor-container"
>
@Html.Hidden("Form_Disabled", ViewData["FormDisabled"])
<
p
>File uploads can not exceed 1MB each and must be of the following file types: pdf, jpg, gif, png.</
p
>
<
div
class
=
"editor-label"
>
@Html.Label("File(s):")
</
div
>
<
div
class
=
"editor-field"
>
@(Html.Kendo().Upload()
.Name("Upload")
.Async(async => async
.Save("AddAttachments", "Proposals", new { proposalID = Model.Proposal_ID })
)
)
</
div
>
<
br
class
=
"clear"
/>
<
br
/>
<
br
/>
@(Html.Kendo().Grid<
PASS.ViewModels.Proposals.AttachmentsViewModel
>()
.Name("Attachments")
.Columns(columns =>
{
columns.Bound(c => c.File_Name).ClientTemplate("<
a
href
=
'" + Url.Action("LoadAttachment", "Proposals") + "/#= ID #'
>" + "#= File_Name #" + "</
a
>").Title("File Name");
columns.Bound(c => c.File_Size).Title("Size");
columns.Bound(c => c.Content_Type).Title("Type");
columns.Command(command => { command.Destroy(); }).Width(90);
})
.Sortable()
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => model.Id(c => c.ID))
.Read(read => read.Action("GetAttachments", "Proposals", new { proposalID = Model.Proposal_ID }))
.Destroy(destroy => destroy.Action("DeleteAttachment", "Proposals"))
)
)
<
br
/>
<
p
>Upoaded files will not be available for viewing until they have been reviewed.</
p
>
</
div
>
<
script
type
=
"text/javascript"
>
$(document).ready(function () {
var formDisabled = $('#Form_Disabled').val();
if (formDisabled == "True") {
$('#Upload').data('kendoUpload').disable();
$('#Attachments').data('kendoGrid').bind("dataBound", function () {
$('.k-grid-delete', '#Attachments').hide();
})
}
$('#Upload').data('kendoUpload').bind("success", function () {
$('#Attachments').data('kendoGrid').dataSource.read();
})
});
</
script
>
[HttpPost]
public
ActionResult AddAttachments(
int
proposalID, IEnumerable<HttpPostedFileBase> upload)
{
int
user_id = Convert.ToInt32(((Claim)((ClaimsIdentity)Thread.CurrentPrincipal.Identity).FindFirst(a => a.Type.Equals(
"UserID"
))).Value);
var return_message =
""
;
if
(CheckProposalReadAccess(user_id, proposalID))
{
using
(var context =
new
PASSEntities())
{
foreach
(var file
in
upload)
{
if
(Path.GetExtension(file.FileName) !=
".pdf"
|| Path.GetExtension(file.FileName) !=
".jpg"
|| Path.GetExtension(file.FileName) !=
".gif"
|| Path.GetExtension(file.FileName) !=
".png"
)
{
return_message =
"Uploads must be one of the following file types: pdf, jpg, gif, png."
;
break
;
}
if
(file.ContentLength > 1024)
{
return_message =
"Uploads can not be larger than 1MB each."
;
break
;
}
Proposal_Attachments model =
new
Proposal_Attachments()
{
Proposal_ID = proposalID,
Upload_Date = DateTime.Now,
File_Name = Path.GetFileName(file.FileName),
File_Size = file.ContentLength,
Content_Type = file.ContentType,
File_Contents =
new
byte
[file.ContentLength],
};
file.InputStream.Read(model.File_Contents, 0, file.ContentLength);
context.Proposal_Attachments.Add(model);
context.SaveChanges();
}
return
Content(return_message);
}
}
else
{
return
RedirectToAction(
"Index"
);
}
}
public
class
UserModel
{
#region Properties
[Display(Name = @
"Username"
)]
[Required]
public
string
UserName {
get
;
set
; }
[Required]
public
string
Name {
get
;
set
; }
[Display(Name = @
"E-mail"
)]
[EmailAddress]
public
string
Email {
get
;
set
; }
public
string
Phone {
get
;
set
; }
public
string
Company {
get
;
set
; }
[DataType(DataType.Password)]
[Display(Name = @
"Password"
)]
[Required]
public
string
PasswordHash {
get
;
set
; }
[Display(Name= @
"Roles"
)]
public
List<
string
> UserRoles {
get
;
set
; }
[ScaffoldColumn(
false
)]
public
string
UserRoleIcon {
get
;
set
; }
[ScaffoldColumn(
false
)]
public
string
UserRoleIconInverted {
get
;
set
; }
#endregion
public
UserModel()
{
}
public
UserModel(UserContract userContract)
{
SetupUserModel(userContract);
}
private
void
SetupUserModel(UserContract userContract)
{
UserName = userContract.UserName;
Name = userContract.Name;
Email = userContract.Email ??
""
;
Phone = userContract.Phone ??
""
;
Company = userContract.Company ??
""
;
PasswordHash = userContract.PasswordHash ??
""
;
UserRoles =
new
List<
string
>();
if
(userContract.UserRoles !=
null
)
{
foreach
(var userRole
in
userContract.UserRoles)
{
UserRoles.Add(userRole);
}
}
SelectUserRoleIcon(UserRoles);
}
// TODO: Hierarchy on roles and selecting images?
private
void
SelectUserRoleIcon(IEnumerable<
string
> userRoles)
{
foreach
(var userRole
in
userRoles)
{
switch
(userRole.ToLower())
{
case
"administrator"
:
UserRoleIcon =
"Administrator.png"
;
UserRoleIconInverted =
"Administrator_Black.png"
;
break
;
case
"operator"
:
UserRoleIcon =
"Operator.png"
;
UserRoleIconInverted =
"Operator_Black.png"
;
break
;
case
"supervisor"
:
UserRoleIcon =
"Supervisor.png"
;
UserRoleIconInverted =
"Supervisor_Black.png"
;
break
;
default
:
UserRoleIcon =
"Guest.png"
;
UserRoleIconInverted =
"Guest_Black.png"
;
break
;
}
}
}
}
@(Html.Kendo().Grid<Stimline.Xplorer.Services.Models.User.UserModel>()
.Name(
"grid"
)
.Columns(columns =>
{
columns.Bound(p => p.UserName);
columns.Bound(p => p.Name);
columns.Bound(p => p.Email);
columns.Bound(p => p.Phone);
columns.Bound(p => p.UserRoles);
columns.Command(command => { command.Edit(); }).Width(160);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(
new
{ style =
"height:430px;"
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Events(events => events.Error(
"error_handler"
))
.Model(model => model.Id(p => p.UserName))
.Create(update => update.Action(
"EditingPopup_Create"
,
"UserManagement"
))
.Read(read => read.Action(
"EditingPopup_Read"
,
"UserManagement"
))
.Update(update => update.Action(
"EditingPopup_Update"
,
"UserManagement"
))
//.Destroy(update => update.Action("EditingPopup_Destroy", "Grid"))
)
)
01.
public
JsonResult GetTestDetailed([DataSourceRequest] DataSourceRequest request)
02.
{
03.
var testTable = dataAccessLayer.GetDataTable(
"select statement here"
);
//testTable will be about 600 rows
04.
var testDictionary = (from DataRow row
in
testTable.Rows select testTable.Columns.Cast<DataColumn> ().ToDictionary(column => column.ColumnName, column => row[column].ToString())).ToList().AsQueryable();
05.
return
Json(testDictionary.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
06.
}
07.
}
08.
09.
[AcceptVerbs(HttpVerbs.Post)]
10.
public
ActionResult Update([DataSourceRequest] DataSourceRequest request, TestDirectoryDetail testDetail)
11.
{
12.
dataAccessLayer.Update(testDetail);
13.
return
Json(
new
[] { testDetail }.ToDataSourceResult(request, ModelState));
14.
}
01.
<script type=
"text/javascript"
>
02.
function onSync(e) {
03.
var grid = $(
'#TestGrid'
).data(
'kendoGrid'
);
04.
grid.dataSource.read();
05.
}
06.
</script>
07.
08.
@(Html.Kendo().Grid((IEnumerable<DirectoryDetail>)ViewBag.Details)
09.
.Name(
"TestGrid"
)
10.
.HtmlAttributes(
new
{ style =
"height:850px;"
})
11.
.Editable(editable => editable.Mode(GridEditMode.InLine))
12.
.Events(e => e.SaveChanges(
"onSaveChanges"
))
13.
.Filterable()
14.
.Groupable()
15.
.Pageable()
// Enable pageing
16.
.Scrollable(scr=>scr.Height(
"auto"
))
17.
.Sortable()
// Enable sorting
18.
.DataSource(dataSource => dataSource
19.
.Ajax()
20.
.Events(events => events.Error(
"error_handler"
).Sync(
"onSync"
))
21.
.PageSize(15)
22.
.Model(model =>
23.
{
24.
model.Id(p => p.Id);
25.
})
26.
.Update(update => update.Action(
"Update"
,
"Home"
))
27.
.Read(read => read.Action(
"GetPracticesDetailed"
,
"Home"
))
28.
)
29.
.Columns(columns =>
30.
{
31.
columns.Bound(m => m.PracticeId).Title(
"Id"
);
32.
columns.Bound(m => m.PayManager).Width(150).Title(
"DPM"
).Template(m => m.PayManager).EditorTemplateName(
"PayManagerDropDown"
).ClientTemplate(
"#:PayManager#"
);
33.
columns.Command(command => command.Edit()).Title(
"Actions"
);
34.
})
35.
.Resizable(resize => resize.Columns(
true
)))
01.
@(Html.Kendo().ComboBox()
02.
.Name(
"PayManagerId"
)
03.
.Filter(FilterType.StartsWith)
04.
.HtmlAttributes(
new
{style =
"width:auto;"
})
05.
.Placeholder(
"Type beginning of name to select new pay manager"
)
06.
.DataTextField(
"FullName"
)
07.
.DataValueField(
"userid"
)
08.
.AutoBind(
true
)
09.
.Suggest(
true
)
10.
.DataSource(source => source.Read(read => read.Action(
"GetUsers"
,
"Home"
)).ServerFiltering(
false
)))