在网格视图中复制DropDownList选定项的行的总和值

时间:2017-04-03 08:40:40

标签: c# asp.net

我的库存应用程序中有一个GridView ...我正在使用该网格视图的产品...它工作正常但我想要的是检查是否多次选择相同供应商的相同产品像我在图片中所做的gridview然后将其数量加以确保它小于它的库存。 对于单一产品,它只会将其与其库存进行比较,但对于每个重复的产品,将添加数量的价值并将其与其库存进行比较。 任何帮助将受到高度赞赏...... enter image description here

例如计算机专区的键盘被选中两次并且它的库存为15 ...我想总和数量10 + 7 = 17并且如果它大于它的库存则抛出一条消息,否则将其保存为15行... 和计算机专区的笔被选中两次(它可以是三次或更多)并且它的库存为50 ...数量10 + 60 = 70并且如果它大于它的库存则抛出一条消息... ...

2 个答案:

答案 0 :(得分:1)

您可以使用javascript或jQuery计算同一产品的总数量,然后将其与此产品的可用库存进行比较。以下示例使用jQuery。

要进行计算,首先应为网格中的所有项目指定名称或类别。示例行应如下所示。

<tr>
    <td class="no">XX</td>
    <td><select  class="vendor" >... </select></td>
    <td><select  class="product" >...</select></td>
    <td><input class="stock" value="YY" readonly="true"></td>
    <td><input class="quantity" value="ZZ"></td>
</tr>

然后为项目数量

的更改事件添加处理程序
$('.quantity').change(function(e){
    var quantity = $(this);
    var row = quantity.closest("tr"); 
    var selectedVendor = $(".vendor option:selected", row).val();
    var selectedProduct = $(".product option:selected", row).val();

    // Get all row that have the same vendor and product 
    var sameRows = $(".product option:selected[value='" + selectedProduct + "']", $(".vendor option:selected[value='" + selectedVendor + "']").closest("tr")).closest("tr");

    // Calculate total quantity of same product
    var total = 0;
    sameRows.each(function() {
        total += parseInt($(".quantity", this).val());
    });

    // Compare total quantity and stock
    var stock = parseInt($(".stock", row).val()); 
    if (total > stock) {
        alert("Quantity access available stock");
        quantity.focus();
    }
});

您还应该考虑为下拉列表供应商产品添加类似的处理程序。

我已经创建了一个演示here,您可以查看。

答案 1 :(得分:0)

您可以轻松地在gridview的RowDataBound上执行此操作。

只需要获得数量,库存,产品和供应商。但是你也可以通过下面的函数来做到这一点,如果gridview中有重复的东西,它会给你记录。

 public void HighlightDuplicate(GridView gridview)
{
    for(int currentRow = 0; currentRow < gridview.Rows.Count - 1; currentRow++)
    {
        GridViewRow rowToCompare = gridview.Rows[currentRow];
        for (int otherRow = currentRow + 1; otherRow < gridview.Rows.Count; otherRow++)
        {
            GridViewRow row = gridview.Rows[otherRow];
            bool duplicateRow = true;
            //example: check Duplicate on column vendor(cell#0) and product(cell#1)
            if ((rowToCompare.Cells[0].Text) != (row.Cells[0].Text) && (rowToCompare.Cells[1].Text) != (row.Cells[1].Text))
            {
                duplicateRow = false;
            }
            else if (duplicateRow)
            {
                rowToCompare.Cells[1].Text = Convert.ToInt32(row.Cells[1].Text) + Convert.ToInt32(rowToCompare.Cells[1].Text);
row.Visible=false;
            }
        }
    }
}

在这个函数中,您可以检查我们是在比较行还是在内部,我们有单元格并检查单元格值。

  if ((rowToCompare.Cells[0].Text) != (row.Cells[0].Text) && (rowToCompare.Cells[1].Text) != (row.Cells[1].Text))
        {
            duplicateRow = false;
        }
        else if (duplicateRow)
        {
            rowToCompare.Cells[1].Text = Convert.ToInt32(row.Cells[1].Text) + Convert.ToInt32(rowToCompare.Cells[1].Text); 
row.Visible=false;
        }

在这部分我们比较单元格索引0和1,如果相同意味着我们有供应商和产品相同,则它们不应该相同。如果供应商和产品相同,则将它们的值和设置组合为仅一行,第二行我设置为可见假,您可以执行其他操作(如果需要),此处可以在添加两个行值后检查(如果数量更大或者少,你可以做相应的操作。 你可以在DataBind()之后调用这个函数。例如,如果gridview id是Gridview1,那么:

  HighlightDuplicate(this.GridView1);