Member 11579819 Ответов: 1

Как получить доступ к данным в Kendo grid с помощью angular?


У меня есть сетка кендо с несколькими столбцами (назовем их A,B,C,D), где данные в столбце A &B я получаю из базы данных. Колонка с-это выпадающее и..

мое требование заключается в том, что при изменении выпадающего списка в столбце C я должен выполнить какие-то вычисления по значениям столбца B &C(то есть выпадающего значения), и результат должен быть обновлен в столбце D.

До выпадающей части мой код работает очень хорошо. Чего я не могу добиться, так это получить значение столбца B при изменении события выпадающего списка. Я попытался использовать $scope там, но безрезультатно. ""Я надеюсь, что смогу ясно донести свою проблему"..


Любая помощь будет высоко оценена......

Что я уже пробовал:

<select kendo-drop-down-list
                k-options="roleOptions"
                style="width: 100%"></select>
    
    

    

    <script>
        angular.module('PerformanceApp', ["kendo.directives"]).controller('PerformanceController', function ($scope, $http, $q) {

            $scope.Roles = {
                serverFiltering: true,
                transport: {
                    read: {
                        url: "Performance/GetRoles"
                    }
                }
            }

            $scope.roleOptions = {
                optionLabel: "Select Role..",
                dataSource: $scope.Roles,
                dataTextField: "Role",
                dataValueField: "Id",
                change: function (e) {
                    console.log(e.sender.value());
                    var aa = $scope.GetServerData(e.sender.value());
                    aa.then(function (data) {
                        $scope.gridData.data(data);
                    });
                }
            };

            $scope.gridData = new kendo.data.DataSource({
                group: { field: "Category" }
            });

            $scope.gridColumns = [
                    //{ field: "Category", title: "Category" },
                    { field: "CategoryParameter", title: "Category Parameter" },
                    { field: "TI", title: "Team/Individual" },
                    { field: "Score", title: "Score" },
                    { field: "YourRating", title: "Your Rating", template: '<select kendo-drop-down-list k-options="yourRating" style="width: 100%"></select>' },
                    { field: "YourComment", title: "Your Comment", editable: true },
                    { field: "ManagerRating", title: "Manager Rating", template: '<select kendo-drop-down-list k-options="managerRating" style="width: 100%"></select>' },
                    { field: "ManagerComment", title: "Manager Comment", editable: true },
                    { field: "IWeightage", title: "Individual Weightage", template: "" },
                    { field: "MWeightage", title: "Manager Weightage", template: "" }
            ];

            $scope.ratingDataSource = [
                    { Text: 1, Value: 1 },
                    { Text: 2, Value: 2 },
                    { Text: 3, Value: 3 },
                    { Text: 4, Value: 4 },
                    { Text: 5, Value: 5 },
            ];

            $scope.yourRating = {
                dataTextField: "Text",
                dataValueField: "Value",
                dataSource: $scope.ratingDataSource,
                change: function (e) {
                    debugger;
                    //Here I want the value of column "Score"
                    console.log(parseInt(this.value()));
                }
            };

            $scope.managerRating = {
                dataTextField: "Text",
                dataValueField: "Value",
                dataSource: $scope.ratingDataSource,
                change: function (e) {
                    console.log(parseInt(this.value()));
                }
            };

            $scope.GetServerData = function (value) {
                var deferred = $q.defer();
                $http({
                    method: 'GET',
                    url: '/Performance/GetInitialValues',
                    params: { roleId: value }
                })
                .success(function (data) {
                    console.log(data);
                    deferred.resolve(data);
                });
                return deferred.promise;
            }
        });

    </script>

Andy Lanng

Я не вижу из вашего фрагмента кода никаких подробностей вашей сетки или того, как вы добавляете combobox. Это усложняет дело. Я понятия не имею, что ты можешь упустить.
Пожалуйста, используйте кнопку улучшить вопрос и включите немного больше деталей.

Получить данные из сетки тривиально, но это зависит от того, как вы их создаете

Member 11579819

Привет... я обновил вопрос. Извините, что не отформатировал его должным образом, так как это делало доступным для просмотра только небольшой код. взгляните на это. И дайте мне знать, если вы можете мне чем-то помочь

Andy Lanng

Да, я тоже пытался. довольно странно. Я только что положил на него простой текст :S

Member 11579819

Любые предложения по этому поводу

Member 11579819

Кендо сетки не хватало.. Выглядит это примерно так:

""кендо сетки="performanceGrid"
k-data-source= " gridData"
k-столбцы= " gridColumns" ""

Member 11579819

Двойная цитата-это div В приведенном выше комментарии

1 Ответов

Рейтинг:
2

Andy Lanng

сначала вам нужно событие (я предполагаю, что вы просто еще не написали его).

$scope.gridColumns = [
   { field: "CategoryParameter", title: "Category Parameter" },
   { field: "TI", title: "Team/Individual" },
   { field: "Score", title: "Score" },
   { field: "YourRating", title: "Your Rating", template: '<select kendo-drop-down-list k-options="yourRating" style="width: 100%" ng-change="ratingChange(#= uid #)"></select>' },
   { field: "YourComment", title: "Your Comment", editable: true },
   { field: "ManagerRating", title: "Manager Rating", template: '<select kendo-drop-down-list k-options="managerRating" style="width: 100%"  ng-change="mRatingChange(#= uid #)"></select>' },
   { field: "ManagerComment", title: "Manager Comment", editable: true },
   { field: "IWeightage", title: "Individual Weightage", template: "" },
   { field: "MWeightage", title: "Manager Weightage", template: "" }
            ];


Затем, с обработчиками, принимающими жидкость, это довольно легко:

$scope.rateingChanged = function(uid){
    // if you use the angular kendo grid (and you do) then it's tag is available on the scope
    var rating = $scope.YouGridHere.dataSource.getByUid(get).get("YourRating");
    $scope.YouGridHere.dataSource.getByUid(uid).set("YourPropHere", rating );
}
$scope.mRateingChanged = function(uid){
    var rating = $scope.YouGridHere.dataSource.getByUid(get).get("ManagerRating");
    $scope.YouGridHere.dataSource.getByUid(uid).set("YourPropHere", rating );
}


В любом случае, вы поняли идею :)


Member 11579819

Как мы можем использовать ng-change без ng-модели...
А если я должен НГ-моделировать, то где же она должна быть??

Andy Lanng

Я бы подумал, что этот выпадающий список кендо реализовал бы модель для этого.

Вы могли бы реализовать модель самостоятельно. Сетка должна быть скомпилирована во время выполнения. Если нет, вы можете сделать это сами.

Вы могли бы повесить ng-change и перейти на onchange?