【问题标题】:How can save all changed data in details grid (table)如何将所有更改的数据保存在详细信息网格(表格)中
【发布时间】:2019-04-16 07:42:53
【问题描述】:

我使用 asp.net web api 和 angularjs (javascript) 编写了简单的 web 应用程序。在这个应用程序中,我有一个主网格,当我单击行内的按钮时,将打开模态对话框。模态对话框包含有许多项目的详细网格(表格)。见下图:

他的数据中的每个项目都包含 parentId。在我的例子中,每个细节网格项都包含 id = 1,我们可以在下一张图片中看到:

此解决方案(当我单击“加号”按钮时)工作正常(只有 Kolicina 字段可以进行更改)。但是,我们必须逐行单击加号按钮以保存所有更改。我的问题是,如何实现功能,在模式对话框中我们将只有一个按钮来保存所有行更改。我假设应该将数组(所有项目更改)转发到 web api 控制器方法。 感谢您提供任何有用的信息。

编辑 我的 html 模态看起来像:

<div id="vipZaglavljeModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
    <div class="modal-content" style="overflow:scroll;max-height:700px;width:750px;">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title">VIP Stavke</h4>
        </div>
        <div class="modal-body">
            <table id="myTableModal" class="table table-bordered table-condensed">
                <thead>
                    <tr>
                        <th style="padding-left:15px;font-size:medium;">Id</th>
                        <th style="font-size:medium">Sifra</th>
                        <th style="font-size:medium">Naziv</th>
                        <th style="font-size:medium">Kolicina</th>
                        <th style="font-size:medium;width:70px;">Prodavnica</th>
                        <th style="font-size:medium">***</th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="stavka in stavke track by $index">
                        <td style="padding-left:15px;font-size:medium;padding-top:12px;">{{stavka.Id}}</td>
                        <td style="font-size:medium;padding-top:12px;">{{stavka.Sifra}}</td>
                        <td style="font-size:medium;padding-top:12px;">{{stavka.Naziv}}</td>
                        <td style="font-size:medium;padding-top:12px;"><input type="text" class="form-control" ng-model="stavka.Kolicina" style="width:70px;margin-top:-5px;"/></td><!--ng-class="{ nakonStoKliknesSave: kliknutoNaSave[$index] }"-->
                        <td style="font-size:medium;padding-top:12px;">{{stavka.Prodavnica}}</td>
                        <td style="font-size:medium;padding-top:12px;"><button ng-click="vipZaglavljePut(stavka.Id, stavka)" ng-disabled="((formatDateScope(stavka.VIPZaglavlje.Pocetak) < trenutniDatumIVrijeme && formatDateScope(stavka.VIPZaglavlje.Kraj) < trenutniDatumIVrijeme) || (formatDateScope(stavka.VIPZaglavlje.Pocetak) > trenutniDatumIVrijeme && formatDateScope(stavka.VIPZaglavlje.Kraj) > trenutniDatumIVrijeme) || (formatDateScope(stavka.VIPZaglavlje.Pocetak) > trenutniDatumIVrijeme && formatDateScope(stavka.VIPZaglavlje.Kraj) < trenutniDatumIVrijeme))" class="btn btn-primary" style="margin-top:-5px">+</button></td>
                    </tr>
                </tbody>
            </table>
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal" style="font-size:medium">OK</button>
            <!--<button type="button" class="btn btn-primary" ng-click="osnovnaSredstvaDelete()" style="font-size:medium">Da</button>-->
        </div>
    </div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

【问题讨论】:

  • 你能展示你的代码吗?
  • 我可以。这是 angularjs 服务函数:var _vipZaglavljePut = function (id, vipZaglavlje) { var deferred = $q.defer(); $http.put("/api/VIPZaglavlje/" + id, vipZaglavlje).then(function (result) { deferred.resolve(result.data); }, function () { deferred.reject(); }); return deferred.promise; } vipZaglavlje 是对象。
  • 这是 angularjs 控制器功能:$scope.vipZaglavljePut = function (id, vipZaglavlje) { VIPZaglavlje.vipZaglavljePut(id, vipZaglavlje).then( function () { for (var i = 0; i &lt; $scope.stavke.length; i++) { if ($scope.stavke[i].Id == id) { $scope.stavke[i] = vipZaglavlje; } } }, function () { alert("Desila se greška!") }); }
  • 这是web api方法[httpput]:// PUT: api/VIPZaglavlje/5 public void Put(int id, [FromBody]VIPStavkePutModel value) { try { var userName = User.Identity.Name; var VIPStavke = _db.VIPStavke.Where(x =&gt; x.Id.Equals(id)).FirstOrDefault(); VIPStavke.Kolicina = value.Kolicina; _db.SaveChanges(); } catch (Exception ex) { var message = ex.Message; } }
  • 在 html 中,我有带有 ng-repeat 循环的 html 表(如上图 1 所示)。取而代之的是蓝色的“加号”按钮,我只想在模式底部实现一个按钮(用于保存所有更改)。

标签: javascript angularjs asp.net-web-api asp.net-mvc-5


【解决方案1】:

我是否理解正确 - 您希望只有一个按钮来保存表格中的所有 datas。您可以在表格的每一行和顶部的添加按钮中添加一个复选框,该按钮汇总所有检查的数据并将它们发送到 HTML:

   <table id="myTableModal" class="table table-bordered table-condensed">
                <thead>
                    <tr>
                        <th style="padding-left:15px;font-size:medium;">Id</th>
                        <th style="font-size:medium">Sifra</th>
                        <th style="font-size:medium">Naziv</th>
                        <th style="font-size:medium">Kolicina</th>
                        <th style="font-size:medium;width:70px;">Prodavnica</th>
                        <th style="font-size:medium">***</th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="stavka in stavke track by $index">
                        <td style="padding-left:15px;font-size:medium;padding-top:12px;">{{stavka.Id}}</td>
                        <td style="font-size:medium;padding-top:12px;">{{stavka.Sifra}}</td>
                        <td style="font-size:medium;padding-top:12px;">{{stavka.Naziv}}</td>
                        <td style="font-size:medium;padding-top:12px;"><input type="text" class="form-control" ng-model="stavka.Kolicina" style="width:70px;margin-top:-5px;"/></td><!--ng-class="{ nakonStoKliknesSave: kliknutoNaSave[$index] }"-->
                        <td style="font-size:medium;padding-top:12px;">{{stavka.Prodavnica}}</td>
                        <td style="font-size:medium;padding-top:12px;"> <button class="btn" ng-click="vipZaglavljePut(stavka)">+</button></td>
                    </tr>
                </tbody>
            </table>
        </div>
 <div ng-if="Kolicina">{{id}} : {{Kolicina}}</div>

JS:

    $scope.vipZaglavljePut = function (stavka){
          console.log(stavka.Kolicina);
          $scope.id = stavka.Id;
          $scope.Kolicina = stavka.Kolicina;
}

这里是 plunker:http://plnkr.co/edit/h1Jao3YfbFCd2n33bQtk?p=preview

【讨论】:

  • 我已经编辑了我的帖子。如您所见,我有输入值,用于更改字段“Kolicina”。是否有可能在没有复选框控件的情况下实现?
猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 2012-03-29
  • 2016-11-24
  • 2019-06-06
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2014-05-24
相关资源
最近更新 更多