Hi,
I need to display data in grid where it needs to display pre uploaded files in one of the column. User will also be able to edit the column and be able to delete or upload new attachment in the column. The user should be able to upload multiple files and the grid should display multiple files if the user has already uploaded previously.
I have been able to display data in grid with one attachment but having hard time to figure out how to display multiple files and enable uploading multiple files in the grid.
Here is my code:
Razor View:
Test.cshtml
@using Kendo.Mvc.UI
@{
ViewBag.Title = "Test";
}
<
h2
>Test</
h2
>
<
input
id
=
"btnSearch"
type
=
"button"
value
=
"Search"
class
=
"btn btn-default icon-btn-input"
/>
<
div
class
=
"col-sm-12"
>
@(Html.Kendo().Grid<
KendoUIApp3.Models.Certification
>()
.Name("Grid1")
.Columns(columns =>
{
columns.Bound(e => e.SupplierNumber).Width("170px");
columns.Bound(e => e.CustomerItemNumber).Width("170px");
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Pageable(x => x.PageSizes(new object[] { 10, 20, 50, 100, "All" }))
.Reorderable(reorder => reorder.Columns(true))
.AutoBind(false)
.Selectable()
.Sortable(sortable => sortable
.AllowUnsort(true)
.SortMode(GridSortMode.MultipleColumn))
.Scrollable(scr => scr.Height(322))
.Filterable(filterable => filterable
.Extra(false)
.Operators(operators => operators
.ForString(str => str.Clear()
.Contains("Contains")
.StartsWith("Starts with")
.IsEqualTo("Is equal to")
.IsNotEqualTo("Is not equal to"))))
.Resizable(resize => resize.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.ServerOperation(false)
.Read(read => read.Action("GetTestData", "Home"))
.Model(model =>
{
model.Id(p => p.SupplierNumber);
}))
.Events(events => events.Change("onRowSelect"))
)
</
div
>
<
br
/><
br
/>
<
div
class
=
"col-sm-12"
>
@(Html.Kendo().Grid<
KendoUIApp3.Models.CertificationDetail
>()
.Name("Grid2")
.Columns(columns =>
{
columns.Command(command =>
{
command.Edit().Text("Edit").HtmlAttributes(new { title = "Edit" });
}).Width(180).Title("Action");
columns.Bound(e => e.CertificationName).Width("170px");
columns.Bound(e => e.Value).ClientTemplate("<
input
type
=
'checkbox'
disabled #=Value == true ?
checked
=
'checked'
: '' # />").Width("170px");
columns.Bound(e => e.Attachment).Width("300px").ClientTemplate("#if (Attachment != null && Attachment != '')" +
"{# <
a
href
=
'#=Attachment#'
target
=
'_blank'
class
=
'btn-success'
>View Attachment</
a
> #}#")
.EditorTemplateName("_UploadAttachment");
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Pageable(x => x.PageSizes(new object[] { 10, 20, 50, 100, "All" }))
.Reorderable(reorder => reorder.Columns(true))
.AutoBind(false)
.Selectable()
.Sortable(sortable => sortable
.AllowUnsort(true)
.SortMode(GridSortMode.MultipleColumn))
.Scrollable(scr => scr.Height(322))
.Filterable(filterable => filterable
.Extra(false)
.Operators(operators => operators
.ForString(str => str.Clear()
.Contains("Contains")
.StartsWith("Starts with")
.IsEqualTo("Is equal to")
.IsNotEqualTo("Is not equal to"))))
.Resizable(resize => resize.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.ServerOperation(false)
.Read(read => read.Action("GetDetailTestData", "Home").Data("selectedRow"))
.Model(model =>
{
model.Id(p => p.CertificationName);
})
.Update(update => update.Action("SaveCertificationDetail", "Home")))
)
</
div
>
<
script
>
$('#btnSearch').click(function(e) {
$('#Grid1').data('kendoGrid').dataSource.read();
});
function selectedRow() {
var grid = $("#Grid1").data("kendoGrid");
var selectedItem = grid.dataItem(grid.select());
var data = selectedItem ? selectedItem.toJSON() : {};
return { model: data }
}
function onRowSelect() {
$('#Grid2').data('kendoGrid').dataSource.read();
}
</
script
>
_UploadAttachment.cshtml
@using Kendo.Mvc.UI
@(Html.Kendo().Upload()
.Name("uploadedFiles")
.Messages(m => m.Select("Upload Attachment"))
.Async(a => a
.Save("SaveAttachments", "Home")
.Remove("RemoveAttachments", "Home")
.AutoUpload(true)
)
.Multiple(false)
//.Events(e => e.Success("onUploadSuccess"))
//.Events(e => e.Upload("function(args){checkFileExtension(args,'.pdf');}"))
.HtmlAttributes(new { accept = ".pdf" })
)
HomeController.cs
public
ActionResult Test()
{
return
View();
}
public
JsonResult GetTestData([DataSourceRequest] DataSourceRequest request)
{
var certificationList =
new
List<Certification>();
certificationList.Add(
new
Certification {SupplierNumber =
"4343"
, CustomerItemNumber =
"123344"
});
certificationList.Add(
new
Certification {SupplierNumber =
"4242"
, CustomerItemNumber =
"23453"
});
return
Json(certificationList.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
public
JsonResult GetDetailTestData([DataSourceRequest] DataSourceRequest request, Certification model)
{
var certificationDetailLists =
new
List<CertificationDetail>();
if
(model.SupplierNumber ==
"4343"
)
{
certificationDetailLists.Add(
new
CertificationDetail {CertificationName =
"ROHS"
, Value =
true
, Attachment =
"Test.pdf"
});
certificationDetailLists.Add(
new
CertificationDetail {CertificationName =
"REACH"
, Value =
false
});
}
else
{
certificationDetailLists.Add(
new
CertificationDetail { CertificationName =
"RLIM"
, Value =
false
});
certificationDetailLists.Add(
new
CertificationDetail { CertificationName =
"RETIM"
, Value =
true
});
}
return
Json(certificationDetailLists.ToDataSourceResult(request));
}
public
ActionResult SaveAttachments(IEnumerable<HttpPostedFileBase> uploadedFiles)
{
return
Json(
null
);
}
public
ActionResult RemoveAttachments(
string
[] fileNames)
{
return
Json(
""
);
}
Model:
public
class
Certification
{
public
string
SupplierNumber {
get
;
set
; }
public
string
CustomerItemNumber {
get
;
set
; }
}
public
class
CertificationDetail
{
public
string
CertificationName {
get
;
set
; }
public
bool
Value {
get
;
set
; }
public
string
Attachment {
get
;
set
; }
}