从子表更新父表单元格值

Posted

技术标签:

【中文标题】从子表更新父表单元格值【英文标题】:Update parent table cell value from child table 【发布时间】:2021-05-03 02:09:05 【问题描述】:

我有一张表(父表)和该表中的另一个表(子表)。

我想从子表中更新父表的单元格值。

<table id="example" class="table table-bordered table-striped mt-4 nowrap" style="width:100%">
        <thead>
            <tr class="bg-primary text-light">
                <th></th>
                <th>
                    @html.DisplayName("Restaurant Name")
                </th>
                <th>
                    @Html.DisplayName("Delivery Date")
                </th>
                <th>
                    @Html.DisplayName("Status")
                </th>
                <th class="none">
                    @Html.DisplayName("Preferred Delivery Date")
                </th>
                <th class="none">
                    <b> @Html.DisplayName("Item List") </b>
                </th>
                <th class="none"></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            
            <tr>
                <td></td>
                <td>
                    @Html.DisplayFor(modelItem => item.RestaurantName)
                </td>
                <td>
                    @String.Format("0:dd/MM/yyyy", item.DELIVERED_DATE)
                    @*@Html.DisplayFor(modelItem => item.DELIVERED_DATE.Value.ToString("dd/MM/yyyy"))*@
                </td>
                <td>
                    @if (item.STATUS == 1)
                    
                        <span class="badge badge-secondary">Draft</span>
                    
                    @if (item.STATUS == 2)
                    
                        <span class="badge badge-warning">Pending confirmation</span>
                    
                    @if (item.STATUS == 3)
                    
                        <span class="badge badge-primary">Confirmed</span>
                    
                    @if (item.STATUS == 4)
                    
                        <span class="badge badge-suceess">Delivered</span>
                    
                </td>
                <td>
                    :  @String.Format("0:dd/MM/yyyy", item.PREFERRED_DELIVERY_DATE)
                </td>
                <td>
                    :
                    <table>
                        <thead>
                            <tr class="bg-primary text-light">
                                <th>
                                    @Html.DisplayName("Item Name")
                                </th>
                                <th>
                                    @Html.DisplayName("Quantity")
                                </th>
                                <th>
                                    @Html.DisplayName("Price")
                                </th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                @foreach (var test in item.OrderSupplierItems)
                                
                                <tr>
                                    <td>@Html.DisplayFor(modelItem => test.IngredientName)</td>
                                    <td>@Html.DisplayFor(modelItem => test.QUANTITY)</td>
                                    <td>@Html.DisplayFor(modelItem => test.PRICE)$</td>
                                </tr>
                            
                                <tr>
                                    <td colspan="2">Sum</td>
                                    <td>@item.OrderSupplierItems.Sum(b => b.PRICE)$</td>
                                </tr>
                                <tr>
                            </tbody>
                        </table>
                    </td>
                <td>
                    <a class='Confirm btn btn-success' href='javascript:;@item.ID_ORDER_SUPPLIER'>CONFIRM</a>
                    <a class='btn btn-primary'>MAKE CHANGES</a>
                </td>
                </tr>
                
        </tbody>
    </table>

我想更改 ajax 成功请求的状态。

$("body").on("click", "#example TBODY .Confirm", function () 
        if (confirm("Do you want to confirm this order?")) 
            var row = $(this).closest("tr");
            var orderSupplierId = $(this).attr('href').substr(12); 
            $.ajax(
                type: "PUT",
                url: "@System.Configuration.ConfigurationManager.AppSettings["ServiceUrl"]/api/OrderSupplier/" + orderSupplierId +"?status=3",
                contentType: 'application/json',  // <---add this
                dataType: 'text',
                success: function (response) 
//here i want to do this
                ,
                error: function (xhr, textStatus, errorThrown) 
                    console.log(errorThrown);
                
            );
        

我需要根据确认更改按钮更新父表的状态字段。 我需要替换当前表的状态字段的当前文本。

【问题讨论】:

确认状态来自后端? response 到底有什么? 你不用担心响应,我只想更新行文本 【参考方案1】:

您可以使用closest('tr').find("td:eq(3)"),这将引用表格中的第四列td,即:状态列并使用.html.text 在那里进行更改。

演示代码

$("body").on("click", ".Confirm", function() 
  if (confirm("Do you want to confirm this order?")) 
    var row = $(this); //declare this outside..ajax call
    var orderSupplierId = $(this).attr('href').substr(12);
    //ajaxcodes..
    //success: function(response) 
    //here i want to do this
    row.closest('tr').find("td:eq(3)").html('<span class="badge badge-primary">Confirmed</span>')
    //,
    //other codes
  
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<table id="example" class="table table-bordered table-striped mt-4 nowrap" style="width:100%">
  <thead>
    <tr class="bg-primary text-light">
      <th></th>
      <th>
        Restaurant Name
      </th>
      <th>
        Delivery Date
      </th>
      <th>
        Status
      </th>
      <th class="none">
        Preferred Delivery Date
      </th>
      <th class="none">
        <b>Item List </b>
      </th>
      <th class="none"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td></td>
      <td>
        Somehtings..
      </td>
      <td>
        02/02/202
      </td>
      <td>

        <span class="badge badge-warning">Pending confirmation</span>
      </td>
      <td>
        02/3/2020
      </td>
      <td>
        <table>
          <thead>
            <tr class="bg-primary text-light">
              <th>
                Item Name
              </th>
              <th>
                Quantity
              </th>
              <th>
                Price
              </th>
            </tr>
          </thead>
          <tbody>
            <tr>

              <tr>
                <td>somehting</td>
                <td>abc</td>
                <td>12$</td>
              </tr>

              <tr>
                <td colspan="2">Sum</td>
                <td>123$</td>
              </tr>
              <tr>
          </tbody>
        </table>
      </td>
      <td>
        <a class='Confirm btn btn-success' href='javascript:;@item.ID_ORDER_SUPPLIER'>CONFIRM</a>
        <a class='btn btn-primary'>MAKE CHANGES</a>
      </td>
      </tr>
      <tr>
        <td></td>
        <td>
          Somehtings..
        </td>
        <td>
          02/02/202
        </td>
        <td>

          <span class="badge badge-success">Delivered</span>
        </td>
        <td>
          02/3/2020
        </td>
        <td>

          <table>
            <thead>
              <tr class="bg-primary text-light">
                <th>
                  Item Name
                </th>
                <th>
                  Quantity
                </th>
                <th>
                  Price
                </th>
              </tr>
            </thead>
            <tbody>
              <tr>

                <tr>
                  <td>somehting</td>
                  <td>abc</td>
                  <td>12$</td>
                </tr>

                <tr>
                  <td colspan="2">Sum</td>
                  <td>123$</td>
                </tr>
                <tr>
            </tbody>
          </table>
        </td>
        <td>
          <a class='Confirm btn btn-success' href='javascript:;@item.ID_ORDER_SUPPLIER'>CONFIRM</a>
          <a class='btn btn-primary'>MAKE CHANGES</a>
        </td>
        </tr>


  </tbody>
</table>

【讨论】:

对我来说,它更新了 12 美元的价值。 我正在使用数据表 var table = $('#example').DataTable( responsive: details: type: 'column' , columnDefs: [ className: 'control' , orderable: false, 目标: 0 ], order: [1, 'asc'] ); row.closest('tr').closest('table').find("td:eq(3)") ,这行得通,感谢您的帮助,我接受了答案 【参考方案2】:

您可以使用 .closest() 从您所在的元素(即按钮)向后搜索。然后从那里找到状态字段。最好是给状态一个类或ID。所以:

$(this).closest('table').find('.status')

【讨论】:

有什么问题?我是用 $ 来表明它是一个 jquery 对象吗? 最接近的,我试过了,但还是不行,谢谢 我修正了错字。对不起。但是你必须展示更多你实际在做什么的代码。 我确实删除了 $,以避免讨论......不过,我觉得这是一个好习惯。 @AyushShukla 你说它不工作,但然后告诉我你写了什么。最接近的绝对是遍历父母的方式,所以...

以上是关于从子表更新父表单元格值的主要内容,如果未能解决你的问题,请参考以下文章

将单元格颜色从工作表复制到具有相同单元格值的工作表

创建指向另一个 Excel 工作表单元格的链接,并查找最后一个单元格值

使用默认单元格值加载一次视图后如何更新 UITableView 单元格(cell.detailTextLabel.text)的值

PyQt5如何使用python在迭代循环中更新单元格值Qtablewidget

Rxswift 更新 Tableview 单元格值

(Excel) 引用另一个工作表中的单元格时,我可以将工作表名称作为单元格值传递吗?