以上为实现的效果截图

HTML代码如下:

<%@ Page Language="C#" MasterPageFile="~/Admin/MasterIndex.master" AutoEventWireup="true"
    CodeFile="SellOpt.aspx.cs" Inherits="bssm_Sell_SellOpt" Title="销售签单" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <link type="text/css" rel="stylesheet" href="http://www.cnblogs.com/js/showwinmin1css/css.css" />

<script type="text/javascript" src="http://www.cnblogs.com/js/Global.js"></script>

<script type="text/javascript" src="http://www.cnblogs.com/js/jquery-1.2.6.js"></script>

<script type="text/javascript" src="http://www.cnblogs.com/js/jquery-layer.js"></script>

<script type="text/javascript" src="http://www.cnblogs.com/js/json.js"></script>

<script type="text/javascript" src="http://www.cnblogs.com/js/Date.js"></script>

<script type="text/javascript" src="http://www.cnblogs.com/js/My97DatePicker/WdatePicker.js"></script>

<script>
        var purID =  '<%=string.IsNullOrEmpty(Request.QueryString["ID"])?"":Request.QueryString["ID"]%>';     
        var hidToProduct = '<%=hidToProduct.ClientID %>';
        var txtToname = '<%=txtToname.ClientID %>';
        var txtShouldReceive = '<%=txtShouldReceive.ClientID %>';
        var hidProductCount = '<%=hidProductCount.ClientID %>';
        var hidtoCustomer = '<%=hidtoCustomer.ClientID %>';
        var hidToUser = '<%=hidToUser.ClientID %>';
        var txtContractNO = '<%=txtContractNO.ClientID %>';
        var hidPdtModels = '<%=hidPdtModels.ClientID %>'
    </script>

<script type="text/javascript" src="http://www.cnblogs.com/js/SellOpt.js"></script>

<script type="text/javascript" src="http://www.cnblogs.com/js/prototype.js"></script>

<asp:HiddenField ID="hidPdtModels" runat="server" />
    <asp:HiddenField ID="hidToProduct" runat="server" />
    <asp:HiddenField ID="hidtoCustomer" runat="server" />
    <asp:HiddenField ID="hidToUser" runat="server" />
    <asp:HiddenField ID="hidProductCount" runat="server" />
    <asp:HiddenField ID="hidpPay" runat="server" />
    <asp:HiddenField ID="txtToname" runat="server"></asp:HiddenField>
    <asp:TextBox ID="txtShouldReceive" runat="server" Style="display: none;"></asp:TextBox>
    <div class="infotit">
        <h2>
            销售签单</h2>
        <Leixun:loginInfo runat="server" ID="loginInfo1" />
    </div>
    <!--info tit -->
    <div class="editbar">
        <asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" CssClass="btn"
            OnClientClick="return  gettrcount()" />
        <input class="btn" οnclick="javascript:window.location='SellList.aspx';" type="button"
            value="销售单列表" />
    </div>
    <!--edit bar -->
    <div style="border: 1px solid #ccc; border-bottom: none">
        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bartb">
            <tr>
                <td>
                    销售编号:<asp:TextBox ID="txtContractNO" class="n_input" runat="server"></asp:TextBox></td>
                <td>
                    &nbsp;&nbsp;&nbsp;经手人<span class="fc_red">*</span>:
                    <asp:TextBox ID="txtToUser" runat="server" ReadOnly="True" class="n_input"></asp:TextBox><image
                        src="http://www.cnblogs.com/admin/ui/s2.gif" style="cursor: pointer;" οnclick="showsentence('http://www.cnblogs.com/module/userselect.aspx?NO=<%=hidToUser.ClientID %>&name=<%=txtToUser.ClientID %>&Type=radio')" /><image
                            style="cursor: pointer;" οnclick="showsentence('http://www.cnblogs.com/module/useradd.aspx?sid=<%=hidToUser.ClientID %>&name=<%=txtToUser.ClientID %>')"
                            src="http://www.cnblogs.com/admin/ui/s1.gif" /><asp:RequiredFieldValidator ID="RequiredFieldValidator2"
                                runat="server" ErrorMessage="销售员不能为空" ControlToValidate="txtToUser" Display="Dynamic"></asp:RequiredFieldValidator></td>
                <td rowspan="2" valign="top">
                    备注:
                    <asp:TextBox ID="txtMemo" TextMode="MultiLine" runat="server" Style="width: 240px;
                        height: 50px; vertical-align: text-top"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    客&nbsp;&nbsp;户 <span class="fc_red">*</span> :<asp:TextBox ID="txtToCustomer" runat="server"
                        ReadOnly="True" class="gys_input"></asp:TextBox><image style="cursor: pointer;" src="http://www.cnblogs.com/admin/ui/s2.gif"
                            οnclick="showsentence('http://www.cnblogs.com/module/CustomerSelect.aspx?NO=<%=hidtoCustomer.ClientID %>&name=<%=txtToCustomer.ClientID %>&type=radio')" /><image
                                style="cursor: pointer;" οnclick="showsentence('http://www.cnblogs.com/module/CustomerAdd.aspx?sid=<%=hidtoCustomer.ClientID %>&name=<%=txtToCustomer.ClientID %>')"
                                src="http://www.cnblogs.com/admin/ui/s1.gif" /></td>
                <td>
                    签单日期<span class="fc_red">*</span>:
                    <asp:TextBox ID="txtCreator" CssClass="Wdate" runat="server" Width="167px" οnfοcus="new WdatePicker(this,'%Y-%M-%D %h:%m:%s',true)"></asp:TextBox>
                </td>
            </tr>
        </table>
        <div id="ctrltable" class="editbar2">
            [<a href="javascript:void(0)" οnclick="addsingle()">新增行</a>] [<a href="javascript:void(0)"
                οnclick="removeall()">删除所有行</a>]
        </div>
        <!--editbar2 -->
    </div>
    <!--top heights -->
    <div style="height: 40%; overflow: auto; border: 1px solid #ccc;" id="changediv">
        <table class="datalist2" id="tbProduct" style="width: 98%;" cellspacing="1">
            <tr>
                <th>
                    名称</th>
                <th style="width: 200px">
                    规格</th>
                <th style="width: 80px">
                    数量</th>
                <th style="width: 80px">
                    单价</th>
                <th style="width: 80px">
                    金额</th>
                <th style="width: 120px">
                    到货日期</th>
                <th style="width: 80px">
                    库存</th>
                <th style="width: 80px">
                    已送货数</th>
                <th style="width: 40px">
                    操作</th>
            </tr>
        </table>
    </div>
    <!--content -->
    <table width="100%" border="0" cellspacing="0" cellpadding="0" class="heji">
        <tr>
            <td width="62%">
                合计:<asp:TextBox ID="txthejiCount" ReadOnly="true" runat="server" Width="100px"></asp:TextBox>
            </td>
            <td width="19%">
            </td>
            <td width="19%">
                金额:<asp:TextBox ID="txthejoTotal" ReadOnly="true" runat="server" Width="100px"></asp:TextBox>
            </td>
        </tr>
    </table>
    <div class="footbar">
        制单人:<%=LeixunOA.UI.UserInfo.GetUserInfo().RealName %>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 制单时间:<%=DateTime.Now.ToShortDateString() %>
    </div>
    <!--footbar -->
    <div class="editbar">
        <asp:Button ID="Button1" runat="server" Text="保存" OnClick="btnSave_Click" CssClass="btn"
            OnClientClick="return  gettrcount()" />
        <input class="btn" οnclick="javascript:window.location='SellList.aspx';" type="button"
            value="销售单列表" />
    </div>
    <!--edit bar -->
</asp:Content>

JS代码如下:

var trTemplate = '<tr><td><input type="hidden" /><input class="n_input" readonly = "readonly"  style="width: 85%" type="text"  /><image style="cursor: hand;" src="http://www.cnblogs.com/admin/ui/s2.gif" /></td><td><input readonly="readonly" class="n_input" style="width:90%;" type="text" /></td><td><input   class="n_input" style="width:90%;" type="text" value="0"  /></td><td><input    class="n_input" style="width:90%;" type="text" /></td><td><input class="n_input" readonly="readonly" style="width:90%;" type="text" /></td><td><input readonly="readonly" οnfοcus="new WdatePicker(this,null,false)" class="n_input" style="width:90%;" type="text" /></td><td><input class="n_input" readonly="readonly" style="width:90%;" type="text" /></td><td><input class="n_input" readonly="readonly" style="width:90%;" value="0" type="text" /></td><td><a href="javascript:void(0)" οnclick="jQuery(this).parent().parent().remove()">删除</a></td></tr>';
       
        var alldelid ="";
        var alldelname ="";
       
        jQuery(document).ready(function(){
       
            jQuery("form").submit(Form_Submit);
       
            RenderProduct();
        });
       
        function RenderProduct()
        {
            if(jQuery("#" + hidPdtModels).val() == "") return;
           
            var models = jQuery.parseJSON(jQuery("#" + hidPdtModels).val());
            jQuery(models).each(function(i,model){
                addsingle();
                jQuery("#tbProduct tr:last td:not(:first,:last)").removeAttr("disabled");
               
                jQuery("#tbProduct tr:last td:eq(0) input[type='hidden']").val(model.pdtID);
                jQuery("#tbProduct tr:last td:eq(0) input[type='text']").val(model.ProductName);
                jQuery("#tbProduct tr:last td:eq(1) input[type='text']").val(model.pNo);
                jQuery("#tbProduct tr:last td:eq(2) input[type='text']").val(model.pdtCount);
                jQuery("#tbProduct tr:last td:eq(3) input[type='text']").val(model.pdtPrice);
                jQuery("#tbProduct tr:last td:eq(4) input[type='text']").val(model.pdtPrice*model.pdtCount);
                jQuery("#tbProduct tr:last td:eq(5) input[type='text']").val(model.arriveTime != null?model.arriveTime.Format("yyyy-MM-dd"):"");
                jQuery("#tbProduct tr:last td:eq(6) input[type='text']").val(model.stockCount);
                jQuery("#tbProduct tr:last td:eq(7) input[type='text']").val(model.pPartInvCount);
               
                switch(model.pdtStatus)
                {
                    case 0:
                        //jQuery("#tbProduct tr:last td:last").html("");
                        break;
                    case 1:
                        jQuery("#tbProduct tr:last td:last").html("已送货");
                        break;
                    default:
                        jQuery("#tbProduct tr:last td:last").html("部分送货");                   
                        break;
                }
            });
        }
       
        function Form_Submit()
        {
           
            if(jQuery("#"+hidtoCustomer).val() == "")
            {
                alert("请选择销售客户!");
                return false;
            }
            if(jQuery("#"+hidToUser).val() == "")
            {
                alert("请选择经手人!");
                return false;
            }
            if(jQuery("#"+txtContractNO).val() == "")
            {
                alert("请填写编号!");
                return false;
            }
           
           
            var submitFlag = true;
            var models = new Array();
            jQuery("#tbProduct tr:gt(0)").each(function(i){
                var model = new Object();
                model.pdtID = jQuery(this).find("td:eq(0) input[type='hidden']").val();
                model.pdtCount = jQuery(this).find("td:eq(2) input[type='text']").val();
                model.pdtPrice = jQuery(this).find("td:eq(3) input[type='text']").val();
                model.arriveTime = jQuery(this).find("td:eq(5) input[type='text']").val();
            
                if(isNaN(parseInt(model.pdtID)))
                {
                    alert("请先选择产品!");
                    submitFlag = false;
                    return false;
                }
               
                if(isNaN(parseFloat(model.pdtCount)))
                {
                    alert("请输入数量!");
                    submitFlag = false;
                    return false;
                }
               
                if(isNaN(parseFloat(model.pdtPrice)))
                {
                    alert("请输入单价!");
                    submitFlag = false;
                    return false;
                }
               
                if(model. arriveTime == "")
                {
                    alert("请输入到货时间!");
                    submitFlag = false;
                    return false;
                }
                models.push(model);
            })   
           if(models.length == 0)
                submitFlag = false;

var strModels = jQuery.toJSON(models);
          
           jQuery("#" + hidPdtModels ).val(strModels);
           return submitFlag;
        }
      
        function showsentence(urls)
        {
            var Url = urls;
            jQuery.layerSetup({
            id:"sentence",
            title:"",
            width:700,
            height:320,
            content:'<iframe id="frm_sentence" src='+Url+' frameborder="0" height="100%" width="100%" ></iframe>',
            isbg:true
           
            });
            jQuery.layershow();
        }
       
        function removeli(id,name)
        {
           
            var llid = id;
            if(name==null)
            {
//                alert(jQuery("#"+id).children(1).children().html());
//                alert(jQuery("#"+id).children(1).next().children()[0].value);
                id = jQuery("#"+llid).children(1).children().html();
                name = jQuery("#"+llid).children(1).next().children()[0].value;
            }
            jQuery("#"+llid).empty();
            jQuery("#ul1 tr").remove("#"+llid);
            jQuery("#"+hidToProduct)[0].value = jQuery("#"+hidToProduct)[0].value.replace(id + ",","");
            jQuery("#"+txtToname)[0].value = jQuery("#"+txtToname)[0].value.replace(name + ",","");
           
        }
        function removeall()
        {
           
            //jQuery("#ul1").children().not("#thd").empty();
            jQuery("#ul1 tr").not("#hd").remove();
            jQuery("#"+hidToProduct)[0].value = alldelid;
            jQuery("#"+txtToname)[0].value = alldelname;
            CalculateSum();
        }
       
        function addsingle()
        {       
            jQuery("#tbProduct").append(trTemplate);
            jQuery("#tbProduct tr:last td:eq(0) img").click(pdtImage_Click);
            jQuery("#tbProduct tr:last td:eq(2) input[type='text'],#tbProduct tr:last td:eq(3) input[type='text']").blur(Caculate_TotalCharge).keydown(function(e){jQuery(e.target).val(jQuery(e.target).val().replace(/[^0-9^.^\-^]/g,'')); });
            jQuery("#tbProduct tr:last td:not(:last,:first)").attr("disabled","disabled");

}
       
       
        function Caculate_TotalCharge(e)
        {
            try{
                var tr = jQuery(e.target).parent().parent();
                var charge = parseFloat(tr.find("td:eq(2) input[type='text']").val()) * parseFloat(tr.find("td:eq(3) input[type='text']").val())
                charge = isNaN(charge)?"0":charge
                jQuery(tr).find("td:eq(4) input[type='text']").val(charge);

var totalCount=totalCharge = 0;
                jQuery("#tbProduct tr:gt(0)").each(function(i,model){
                    totalCharge += parseFloat(jQuery(this).find("td:eq(4) input[type='text']").val());
                    totalCount += parseFloat(jQuery(this).find("td:eq(2) input[type='text']").val());
                })
                totalCharge = isNaN(totalCharge)?"0":totalCharge;
                totalCount = isNaN(totalCount)?"0":totalCount;
                jQuery("input[type='text'][id*='txthejoTotal']").val(totalCharge);
                jQuery("input[type='text'][id*='txthejiCount']").val(totalCount);
            }
            catch(ex){}
        }
       
        function pdtImage_Click(e)
        {
            jQuery("#hidPdtID,#txtPdtName").removeAttr("id");
            var hidPdtID = jQuery(e.target).parent().parent().find("td:eq(0) input[type='hidden']")
            var txtPdtName =  jQuery(e.target).parent().parent().find("td:eq(0) input[type='text']")
            hidPdtID.attr("id","hidPdtID");
            txtPdtName.attr("id","txtPdtName");
            showsentence('http://www.cnblogs.com/module/ProductSelectDiv.aspx?NO=hidPdtID&name=txtPdtName&type=radio&urlele=1&returnFunc=hidPdtID_Change')  
        }
       
        function hidPdtID_Change()
        {
            if(jQuery("#hidPdtID").val() == "") return;
            jQuery("#hidPdtID").parent().parent().find("td:not(:first,:last)").removeAttr("disabled");

try {
                jQuery.ajax({
                    type: "GET",
                    url: "http://www.cnblogs.com/ajax/Product.aspx",
                    data: { "Type": "GetModelByID", "ID":jQuery("#hidPdtID").val() },
                    cache: false,
                    dataType: "json",
                    success: function(model) {
                        if(model == null) return;
                        var tr = jQuery("#hidPdtID").parent().parent();
                        tr.find("td:eq(1) input[type='text']").val(model.pNO);
                        tr.find("td:eq(3) input[type='text']").val(model.pOutPrice);
                        tr.find("td:eq(6) input[type='text']").val(model.stockCount);
                    }
                });
            }
            catch(ex){}
        }
       
        function choosesingle(xlid)
        {  
            showsentence("http://www.cnblogs.com/module/ProductSelectDiv.aspx?NO="+hidToProduct+"&type=radio&type=radio&name="+txtToname+"&lid="+xlid);
        }
        function gettrcount()
        {
           
            /*
            if(jQuery("#"+hidToProduct).val() == "")
            {
                alert("请添加相应产品!");
                return false;
            }

jQuery("#"+hidProductCount)[0].value = jQuery("#ul1 tr").not("#hd:first").length + 2;
            for(var i = 0;i<jQuery("#ul1 tr").not("#hd:first").length + 2;i++)
            {
                if(!ValidPrice(jQuery("#txtCount" + i)))
                {
                    alert("请输入数字类型!");
                    return false;
                }
               
                if(!ValidPrice(jQuery("#txtPrice" + i)))
                {
                    alert("请输入数字类型!");
                    return false;
                }
            }*/
        }
       
        function CalculateSum()
        {
           
            jQuery("#"+txtShouldReceive)[0].value = "0.00";
            for(var i = 0;i<jQuery("#ul1 tr").not("#hd:first").length + 2;i++)
            {
                var count = jQuery("#txtCount" + i);
                var price = jQuery("#txtPrice" + i);
               
                if(count.length != 0 && price.length != 0)
                {
                    var pay  = parseFloat(count[0].value) * parseFloat(price[0].value);
                    jQuery("#"+txtShouldReceive)[0].value = parseFloat(jQuery("#"+txtShouldReceive)[0].value) +(isNaN(pay)==true?0.00:pay);
                }
            }
            jQuery("#sptotal")[0].innerText = jQuery("#"+txtShouldReceive)[0].value;
        }
       
        function chknum(i)
        {
          
            var minnum = jQuery("#spCount"+i)[0].innerText;
            var realnum = jQuery("#txtCount"+i)[0].value;
            if(parseFloat(realnum) < parseFloat(minnum))
            {
                alert("数量不得小于已入库数!");
                jQuery("#txtCount"+i)[0].focus();
            }
        }
       
        function ValidPrice(txtPriceObj)
        {
   //var txtPriceObj=jQuery("#"+id);
   if(txtPriceObj.length!=0)
   {
       var val=parseFloat(txtPriceObj[0].value.trim()*1.0);
       if(isNaN(val))
       {
        return false;
       }
       else
       {
           return true;
       }
   }
   else
   {
       return true;
   }
   
        }

后台代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using LeixunOA.BLL;
using LeixunOA.Model;
using LeixunOA.UI;
using LeixunOA.Common;
using Newtonsoft.Json;
using System.Collections.Generic;

public partial class bssm_Sell_SellOpt : LeixunOA.UI.AdminPage
{
    public string adminname = string.Empty;
    SellContract model;
    SellContractBLL bll;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (UserInfo.GetRoleId() != 0)
            {
                adminname = "超级管理员";

}
            else
            {
                adminname = LeixunOA.UI.UserInfo.GetUserInfo().RoleNames;

}

//ControlData.BindEnumStatus(rdoType, typeof(EnumDefine.SellType));
            //ControlData.BindingCommon(ddlContractType, "t_sysCode", "codeID", "codeName", " parentNO = 'ContractType'", " codeOrder desc  ", string.Empty, "--请选择合同类型--", string.Empty);
            //ControlData.BindEnumStatus(rdoinvoiceStatus, typeof(EnumDefine.invoiceStatus));
            //rdoinvoiceStatus.Items[0].Selected = true;

txtCreator.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

if (!string.IsNullOrEmpty(Request.QueryString["ID"]))
            {
                //txtReceived.Enabled = false;
                txtContractNO.Enabled = false;
                bll = new SellContractBLL();
                model = bll.GetModel(ConvertData.ToInt(Request.QueryString["ID"]));
                if (model != null)
                {
                    txtContractNO.Text = model.scNO;

//rdoType.SelectedValue = model.pClassType.ToString();
                    txtToCustomer.Text = model.CustomerName;
                    hidtoCustomer.Value = model.scCustomerID.ToString();

txtToname.Value = model.pProductName;
                    hidToProduct.Value = model.pProducctID;

txthejoTotal.Text = model.pcShouldReceive.ToString();

hidpPay.Value = model.pcReceived.ToString();
                    //rdoinvoiceStatus.SelectedValue = model.invoiceStatus.ToString();

txtToUser.Text = model.UserName;
                    hidToUser.Value = model.scUserID.ToString();

if (model.scAutoTime != null)
                    {
                        txtCreator.Text = model.scAutoTime.Value.ToString();
                    }

txtMemo.Text = model.scMemo;

txthejoTotal.Text = model.pcShouldReceive.ToString();

List<ProductInSell> piss = (new ProductInSellBLL()).GetListArray(string.Format("sellID={0}", model.sellContractID));
                    decimal count = 0;
                    foreach (ProductInSell pis in piss)
                    {
                        count += pis.pdtCount;
                    }

txthejiCount.Text = count.ToString();

hidPdtModels.Value = JavaScriptConvert.SerializeObject(piss);

/*
                    //合同
                    ddlContractType.SelectedValue = model.scType.ToString();
                    txtContractName.Text = model.scTitle;
                    txtDesc.Text = model.scDesc;
                    txtItem.Text = model.scItem;
                    txtContent.Text = model.scContent;

if (model.scBeginTime != null)
                    {
                        txtStartDate.Text = model.scBeginTime.Value.ToString();
                    }

if (model.scEndTime != null)
                    {
                        txtEndData.Text = model.scEndTime.Value.ToString();
                    }

txtSellerSig.Text = model.scSellerSig;
                    txtPurchaserSig.Text = model.scSellerSig;
                    upfileHidden.Value = model.scResourceID;

*/
                }
            }
            else
            {
                //txtContractNO.Text = EnumDefine.NOType.XS.ToString() + LeixunOA.UI.Application.GetNONum;
                txtContractNO.Text = (new GetNOClass()).SellNO;

}
        }

}
    protected void btnSave_Click(object sender, EventArgs e)
    {
        bll = new SellContractBLL();
        model = new SellContract();

model.scNO = txtContractNO.Text;
        model.CustomerName = Request.Form[txtToCustomer.UniqueID];
        model.scCustomerID = ConvertData.ToInt(hidtoCustomer.Value);
        model.UserName = Request.Form[txtToUser.UniqueID];
        model.scUserID = ConvertData.ToInt(hidToUser.Value);
        model.scMemo = txtMemo.Text;
        if (!string.IsNullOrEmpty(Request.Form[txtCreator.UniqueID]))
        {
            model.scAutoTime = Convert.ToDateTime(Request.Form[txtCreator.UniqueID]);
        }

model.pProductName = txtToname.Value;
        model.pProducctID = hidToProduct.Value;

if (!string.IsNullOrEmpty(Request.Form[txthejoTotal.UniqueID]))
        {
            model.pcShouldReceive = Convert.ToDecimal(Request.Form[txthejoTotal.UniqueID]);
        }

if (!string.IsNullOrEmpty(hidpPay.Value.Trim()))
        {
            model.pcReceived = Convert.ToDecimal(hidpPay.Value.Trim());
        }
        else
        {
            model.pcReceived = 0;
        }

//销售单一旦修改或新添加,审核状态将更改为未审核。
        model.pExamine = Convert.ToInt32(LeixunOA.UI.EnumDefine.FinanceRemitStatus.RemitUnFull);

if (!string.IsNullOrEmpty(Request.QueryString["ID"]))
        {
            //修改
            model.sellContractID = ConvertData.ToInt(Request.QueryString["ID"]);
            AddProduct(model.sellContractID, true);
            bll.Update(model);
            Response.Redirect("SellRead.aspx?ID=" + model.sellContractID.ToString());
            //MessageBox.ShowAndRedirect(Page, "销售记录修改成功", "SellList.aspx");
        }
        else
        {
            //添加
            int id = bll.Add(model);
            AddProduct(id, false);
            if (((Button)sender).ID == "btnnew" || ((Button)sender).ID == "Button2")
            {
                Response.Redirect("Sellopt.aspx");
            }
            else
            {
                Response.Redirect("SellRead.aspx?ID=" + id.ToString());
            }
            //MessageBox.ShowAndRedirect(Page, "销售记录添加成功", "SellList.aspx");
        }
    }

private void AddProduct(int sellID, bool flag)
    {
        ProductInSellBLL pisBll = new ProductInSellBLL();
        List<ProductInSell> pisModels = new List<ProductInSell>();
        ProductInSell pisModel;
        if (flag)
        {
            pisBll.Delete(sellID, ConvertData.ToInt(EnumDefine.ProductInSellStatus.UnOuted));
        }

List<JavaScriptObject> jsObjects = JavaScriptConvert.DeserializeObject<List<JavaScriptObject>>(hidPdtModels.Value);
        foreach (JavaScriptObject jsObj in jsObjects)
        {
            pisModel = pisBll.GetModel(sellID, ConvertData.ToInt(jsObj["pdtID"]));

if (pisModel == null)
            {
                pisModel = new ProductInSell();
            }
           
            pisModel.pdtID = ConvertData.ToInt(jsObj["pdtID"]);
            pisModel.pdtPrice = ConvertData.ToDecimal(jsObj["pdtPrice"].ToString());
            pisModel.pdtCount = ConvertData.ToDecimal(jsObj["pdtCount"].ToString());

if (pisModel.pdtCount == 0) continue;

if(jsObj["arriveTime"] != null)
            {
                pisModel.arriveTime = Convert.ToDateTime(jsObj["arriveTime"]);
            }
            pisModel.sellID = sellID;

if (pisModel.pPartInvCount == pisModel.pdtCount)
            {
                pisModel.pdtStatus = Convert.ToInt32(EnumDefine.ProductInSellStatus.Outed);
            }
            else if (pisModel.pPartInvCount > 0)
            {
                pisModel.pdtStatus = Convert.ToInt32(EnumDefine.ProductInSellStatus.PartOuted);
            }
            else
            {
                pisModel.pdtStatus = Convert.ToInt32(EnumDefine.ProductInSellStatus.UnOuted);
            }

if (pisModel.sysid == 0)
            {
                //添加
                pisBll.Add(pisModel);
            }
            else
            {
                //修改
                pisBll.Update(pisModel);
            }
        }

}

protected void btnSaveAndProduce_Click(object sender, EventArgs e)
    {
        btnSave_Click(sender, e);
        Response.Redirect("../Produce/ProducePlanOpt.aspx");
    }
}

转载于:https://www.cnblogs.com/mady55/archive/2009/03/29/1424458.html

Json 实现数据添加/更新 的页面效果相关推荐

  1. js更新数组对象_7 种Vue 数据已更新而页面没有更新的情况及深化总结(收藏)

    作者:前端1943 链接:https://segmentfault.com/a/1190000022772025 如果你发现你自己需要在 Vue 中做一次强制更新,99.9% 的情况,是你在某个地方做 ...

  2. Vue的数据更新了但页面没有更新及数据频繁更新而页面只更新一次

    1.Vue的数据更新了,而页面没有更新 由于Vue的数据双向绑定,我们只需要修改数据,页面就会自动更新.但有时我们修改了数据,页面却也没有更新,这是为什么? 以下用Vue2为例,整理常见的几种问题 1 ...

  3. 【EXCEL】给数据添加图表(数据条、柱状图、折线图等),快速分析功能图文详解

    目录 0.环境 1.背景+简介 2.具体实现 2.1 给数据添加数据条 实现效果: 具体操作: 2.2 给数据添加柱状图图表 实现效果: 具体操作: 2.3 给数据添加迷你图(在表格中的折线图) 实现 ...

  4. Three.js + React + Echart(折线图 光线流动效果,柱状图数据动态更新动画) + Svga-Web应用之数据大屏(适配1920*1080 2560*1440 3840*2160)

    Web应用之数据大屏 一.技术栈 React 17.0.0 搭建脚手架 Eahcrt常规图表 Svga动画 3D模型-Three.Js 大屏适配-目标大屏(4K -3840*2160) 二.React ...

  5. python 更新数据库历史_python 实现数据库中数据添加、查询与更新的示例代码

    一.前言 最近做web网站的测试,遇到很多需要批量造数据的功能:比如某个页面展示数据条数需要达到10000条进行测试,此时手动构造数据肯定是不可能的,此时只能通过python脚本进行自动构造数据:本次 ...

  6. php 文件 不更新,php页面不刷新更新数据

    php页面不刷新更新数据 php页面不刷新更新数据实现起来很简单,我们可以使用前端的ajax技术. ajax作用:ajax技术的目的是让javascript发送http请求,与后台通信,获取数据和信息 ...

  7. python查询数据库后更新_python 实现数据库中数据添加、查询与更新的示例代码...

    一.前言 最近做web网站的测试,遇到很多需要批量造数据的功能:比如某个页面展示数据条数需要达到10000条进行测试,此时手动构造数据肯定是不可能的,此时只能通过python脚本进行自动构造数据:本次 ...

  8. python代码中怎么增加数据_python 实现数据库中数据添加、查询与更新的示例代码...

    一.前言 最近做web网站的测试,遇到很多需要批量造数据的功能:比如某个页面展示数据条数需要达到10000条进行测试,此时手动构造数据肯定是不可能的,此时只能通过python脚本进行自动构造数据:本次 ...

  9. ajax添加和删除数据,ajax 添加 更新 删除数据库

    ajax 添加 更新 删除数据库 内容精选 换一换 云审计服务(Cloud Trace Service,CTS)记录了数据安全中心相关的操作事件,方便用户日后的查询.审计和回溯,具体请参见云审计服务用 ...

最新文章

  1. 怎样才能学好Vue,听听尤雨溪怎么说?
  2. 利用apache-commons-fileupload写jsp上传文件
  3. C语言程序设计输入x求函数y,C语言程序设计实践(OJ)-初识函数
  4. 视频回顾 | 微信生态数字化运营进阶课大全!
  5. Tomcat整体介绍
  6. js使用base64 上传图片解决iOS手机竖屏拍摄图片发生旋转问题
  7. upupoo设置HTML壁纸,win10 upupoo黑屏怎么解决-解决upupoo设置壁纸黑屏的方法 - 河东软件园...
  8. 使用Nginx、Keepalived构建负载均衡
  9. python input nameerror_用python写的,运行时出现NameError: name 'raw_input' is not defined 这是什么原因?求解...
  10. 直流稳压电源设计(单相)_电力电子课程设计
  11. 计算机一级网页制作教程视频教程,网页制作入门教程(一)
  12. mysql 提高update性能_如何调整Mysql中insert、update、delete的顺序来提高效率_提高MySQL效率与性能的技巧...
  13. 7-9 六度空间 (30 分) C++实现
  14. addClass(““).delay().removeClass(““);没有效果的解决方式
  15. fastq文件转化成bam文件
  16. poi批量导入导出Excel(三、通过模板导出Excel并能实现导入多个sheet表)
  17. 可以带着游泳的耳机、游泳听歌的运动耳机推荐
  18. Kotlin-Android世界的一股清流-函数
  19. RBP as a streaming server(一)
  20. 【Derivation】正态分布特征函数证明-X~N(a,sigma^2)

热门文章

  1. self-assessment
  2. 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf
  3. oracle中scott用户的创建
  4. 如何从ext3升级到ext4?
  5. 学习TypeScrip1(基础类型)
  6. 接口性能测试方案 白皮书 V1.0
  7. selenium的工作原理
  8. c语言股价连续上涨的天数,为什么通达信没有连涨天数,我的通达信怎么没有连涨天数显示...
  9. git创建本地仓库远程仓库,并关联。全过程
  10. Linux中的configure命令作用,linux系统configure命令详解