Hi,
I am working on kendo ui grid with angular application. I use angular service and controller. Grid is displayed within first tabStrip and data for add/edit is displayed within second tabStrip. My grid dataSource contain JSON data which is within separated file.
This is my JSON data for grid:
[{
"Id"
: 1,
"Date"
:
"24.01.2015"
,
"Description"
:
"descr 1"
,
"documentTypeId"
: 1 },{
"Id"
: 2,
"Date"
:
"26.01.2015"
,
"Description"
:
"description2"
,
"documentTypeId"
: 2 },{
"Id"
: 3,
"Date"
:
"22.01.2015"
,
"Description"
:
"description3"
,
"documentTypeId"
: 3 },{
"Id"
: 4,
"Date"
:
"24.01.2015"
,
"Description"
:
"description4"
,
"documentTypeId"
: 2 },{
"Id"
: 5,
"Date"
:
"29.01.2015"
,
"Description"
:
"description5"
,
"documentTypeId"
: 4 },{
"Id"
: 6,
"Date"
:
"25.01.2015"
,
"Description"
:
"description6"
,
"documentTypeId"
: 6 }]
This is my angular service:
angular.module(
"app"
).factory(
'myService'
,
function
($http) {
return
{
getAll:
function
(onSuccess, onError) {
return
$http.get(
'/Scripts/app/data/json/master/masterGridData.js'
).success(
function
(data, status, headers, config) {
onSuccess(data);
}).error(
function
(data, status, headers, config) {
onError(data);
});
},
getDocumentTypes:
function
(onSuccess, onError) {
return
$http.get(
'/Scripts/app/data/json/documentType.js'
).success(
function
(data, status, headers, config) {
onSuccess(data);
}).error(
function
(data, status, headers, config) {
onError(data);
});
}
}
});
This is my controller:
var
app = angular.module(
"app"
, [
"kendo.directives"
]).controller(
"myController"
,
function
($scope, myService) {
$scope.tabStrip =
null
;
$scope.$watch(
'tabStrip'
,
function
() {
$scope.tabStrip.select(0);
});
$scope.dateConfig = {
format:
"dd.MM.yyyy"
}
$scope.masterDataSource =
new
kendo.data.DataSource({
transport: {
read:
function
(options) {
url =
"/Scripts/app/data/json/master/masterGridData.js"
,
myService.getAll(
function
(data) {
options.success(data);
}).error(
function
(data) {
options.error(data);
})
}
},
schema: {
model: {
id:
"Id"
,
fields: {
Id: { type:
"number"
},
Date: { type:
"string"
},
Description: { type:
"string"
},
DocumentTypeId: { type:
"number"
}
}
}
},
pageSize: 16
});
$scope.gridMaster = {
columns: [
{ field:
"Id"
, width:
"70px"
},
{ field:
"Date"
, title:
"Date"
, width:
"70px"
},
{ field:
"Description"
, title:
"Description"
, width:
"170px"
},
{ field:
"DocumentTypeId"
, hidden:
true
}
],
dataSource: $scope.masterDataSource,
selectable:
true
,
filterable:
true
,
scrollable:
true
,
pageable: {
pageSize: 16,
pageSizes: [
"50"
,
"100"
,
"200"
,
"All"
]
},
toolbar: [{
name:
"create"
}],
change:
function
() {
var
dataItem =
this
.dataItem(
this
.select());
$scope.id = dataItem.Id;
$scope.date= dataItem.Date;
$scope.description = dataItem.Description;
$scope.documentTypeId = dataItem.DocumentTypeId;
}
};
$scope.documentType = {
dataSource: {
transport: {
read:
function
(options) {
url =
"/Scripts/app/data/json/documentType.js"
,
myService.getDocumentTypes(
function
(data) {
options.success(data);
}).error(
function
(data) {
options.error(data);
});
}
},
schema: {
model: {
id:
"Id"
,
fields: {
Id: { type:
"number"
},
Name: { type:
"string"
}
}
}
}
},
dataTextField:
"Name"
,
dataValueField:
"Id"
}
});
This is my JSON which contain data for documentType:
[
{
"Id"
: 1,
"Name"
:
"Document 1"
},
{
"Id"
: 2,
"Name"
:
"Document 2"
},
{
"Id"
: 3,
"Name"
:
"Document 3"
},
{
"Id"
: 4,
"Name"
:
"Document 4"
},
{
"Id"
: 5,
"Name"
:
"Document 5"
},
{
"Id"
: 6,
"Name"
:
"Document 6"
}
]
<
html
>
<
head
>
<!-- css and javaScript files -->
</
head
>
<
body
ng-app
=
"app"
ng-controller
=
"myController"
>
<
div
class
=
"divH3Style"
>
<
h3
class
=
"h3LabelForm"
>Grid Master</
h3
>
</
div
>
<
div
id
=
"tabstrip"
class
=
"k-tabstrip-wrapper"
data-kendo-tab-strip
=
"tabStrip"
>
<
ul
>
<
li
>Overview</
li
>
<
li
>Update</
li
>
</
ul
>
<
div
id
=
"tabstrip-1"
>
<
div
id
=
"gridMaster"
kendo-grid
k-options
=
"gridMaster"
k-data-source
=
"masterDataSource"
>
</
div
>
</
div
>
<
div
id
=
"tabstrip-2"
>
<
div
id
=
"tabStrip2Half1"
>
<
div
class
=
"datepickerStyle"
>
<
label
for
=
"date"
class
=
"labelTextSize"
>Date:</
label
>
<
input
id
=
"date"
kendo-date-picker
class
=
"k-datetimepickerMaster"
k-options
=
"dateConfig"
name
=
"date"
ng-model
=
"date"
/>
</
div
>
<
div
class
=
"divHeightStyle"
>
<
label
for
=
"desccription"
class
=
"labelTextSize"
>Description:</
label
>
<
input
id
=
"desccription"
type
=
"text"
class
=
"k-textboxField"
name
=
"description"
placeholder
=
"Description"
ng-model
=
"description"
/>
</
div
>
<
div
id
=
"tabStrip2Half2"
>
<
div
class
=
"divHeightStyle"
>
<
label
for
=
"documentType"
class
=
"labelTextSize"
>Document Type:</
label
>
<
select
kendo-drop-down-list
class
=
"k-dropdownField"
k-options
=
"documentType"
ng-model
=
"documentTypeId"
ng-bind
=
"documentTypeId"
></
select
>
</
div
>
<
div
>
<
button
type
=
"button"
id
=
"saveDataMasterGrid"
class
=
"k-button buttonSaveCancel"
ng-click
=
"saveDataMasterGrid()"
>Save</
button
>
<
button
type
=
"button"
id
=
"cancelDataMasterGrid"
class
=
"k-button buttonSaveCancel"
ng-click
=
"cancelButtonMasterGrid()"
>Cancel</
button
>
</
div
>
</
div
>
</
div
>
</
div
>
</
body
>
</
html
>
In HTML I have dropdownlist which contain data for documentType and my dropdownlist is populated with JSON data. But, problem is in binding.
When I select some grid row dropdownlist always display first item. My grid datasource contain foreign key value (documentTypeId) and this
value should match with Id value from documentType JSON file. My question is how to bind foreign key from grid dataSource to dropdownlist?
Any help will be very useful.
Regards, Branimir