俗话说,磨刀不误砍柴工,先说一下情况。点击按钮后往dgv中添加一行(行中字段含有数量),再点击一次,又添加一行。

假如这两条信息一样。则要进行叠加(数量相加)。我的思路是这样的:每次点击一次就往dgv添加一行,同时拿到行的主键ID。

当再添加一行时,就遍历dgv中的行,拿每行的主键ID和点击时的主键ID作比较,如果相同,就获取这行的数量,加到已有的行

中去,最后移除这行。否则,直接添加一行。

  private void btnzengJia_Click(object sender, EventArgs e)
{
decimal WholesalePrice = ;//定义零售总价
decimal RetailPrice = ;//定义批发总价
int newShockCount = ;//定义新库存数
if (txtYaoPinDaiMa .Text.ToString(). Trim () !=null &&txtBaoZhuangDanWei .Text.ToString().Trim ()!=""
&&txtChuKuShu .Text !="")
{
if(txtChuKuShu.Text.Trim ().Length <)
{
if (Convert.ToInt32(txtKuCunShu.Text.Trim().ToString()) >=
Convert.ToInt32(txtChuKuShu.Text.Trim().ToString()))
{//绑定数据
dgvLingYao.Rows.Add();
int dgvPlaceRowCountRow = dgvLingYao.Rows.Count - ;
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["药品名称"].Value = txtYaoPinMingCheng.Text.Trim();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["药品规格"].Value = txtGuiGe.Text.Trim();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["批发价"].Value = txtPiFaJia.Text.Trim();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["零售价"].Value = txtLingShouJia.Text.Trim().ToString ();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["包装单位"].Value = txtBaoZhuangDanWei.Text.Trim();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["出库数量"].Value = txtChuKuShu.Text.Trim();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["备注"].Value = txtBeiZhu.Text.Trim();
dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["药品ID"].Value = intDrugID;
//计算新库存数
newShockCount = Convert.ToInt32(txtKuCunShu.Text.Trim().ToString())
- Convert.ToInt32(txtChuKuShu.Text.Trim().ToString());
txtKuCunShu.Text = newShockCount.ToString();
int updatecount = myfrmGongYaoLinYongShengQingClient.updateShockCount(intDrugID, Convert.ToInt32
(txtKuCunShu.Text.Trim().ToString()));//修改库存数
foreach (DataGridViewRow dgvr in dgvLingYao.Rows)
{
if (dgvr.Cells["批发价"].Value != null)//计算批发价总额
{
WholesalePrice += Convert.ToDecimal(dgvr.Cells["批发价"].Value) * Convert.ToInt32(dgvr.Cells["出库数量"].Value);
}
if (dgvr.Cells["零售价"].Value != null)//计算零售价总额
{
RetailPrice += Convert.ToDecimal(dgvr.Cells["零售价"].Value) * Convert.ToInt32(dgvr.Cells["出库数量"].Value);
}
}
//绑定数据到文本
LbWholesalePrices.Text = WholesalePrice.ToString(); LbRetailPrice.Text = RetailPrice.ToString();
LbMargin.Text = (WholesalePrice - RetailPrice).ToString();  
int intlock = ;//定义一个整形锁(循环数) foreach (DataGridViewRow dgvr in dgvLingYao.Rows)
{
intlock++;
if (Convert.ToInt32(dgvr.Cells["药品ID"].Value) == intDrugID)
{
if (intlock < dgvLingYao.Rows.Count)//循环到倒数第二条
{
//相加库存数
dgvr.Cells["出库数量"].Value = Convert.ToInt32(dgvr.Cells["出库数量"].Value)
+ Convert.ToInt32(dgvLingYao.Rows[dgvPlaceRowCountRow].Cells["出库数量"].Value);
dgvLingYao.Rows.RemoveAt(dgvPlaceRowCountRow);//移除相同的那行数据
}
}
}
LbRecordCount.Text = dgvLingYao.Rows.Count.ToString();
}
else
{
panel2.Visible = true;
label18.Text = "库存不足";
ShowTime = DateTime.Now;
}
}
else
{
panel2.Visible = true;
label18.Text = "出库数太大";
ShowTime = DateTime.Now;
}
}
else
{
panel2.Visible = true;
label18.Text = "填完整再增加";
ShowTime = DateTime.Now;
}
}

叠加dgv中相同的行信息的更多相关文章

  1. 获取系统中所有进程&线程信息

    读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...

  2. HBase之行信息简析

    这一节我们简单介绍一下HBase的行信息.文章前半部分会对照源码介绍,后面会有我自己画的图,大家如果对这些信息已经比较了解了,跳过源码对照部分看后面的图,加深一下印象. 下面简单分析一下HBase中对 ...

  3. Effective Java 第三版——75. 在详细信息中包含失败捕获信息

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  4. linux下向一个文件中的某行插入数据的做法

    sed -i 'ni\x' test.file        表示向test.file文件里的第n行的前面添加x内容sed -i 'na\x' test.file       表示向test.file ...

  5. PHP中如何命令行

    PHP中如何命令行 一.总结 一句话总结:配置php系统环境,然后命令行中运行 php -f 文件名即可 配置php系统环境 php_-f_文件名 例如: 1.三种运行php的方式? 运行文件_-f ...

  6. Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...

  7. POWERSHELL 计划任务的创建,收集DC中失败的登录信息并邮件通知

    (注:本文参考以下前辈文章修改而来,源文章连接:http://itadmindev.blogspot.hk/2011/07/powershell-ad-dc-failed-logins-report. ...

  8. 【Eclipse】如何在Eclipse中使用命令行?

    如何在Eclipse中使用命令行? 虽然我们已经有了像 Eclipse 这样高级的 IDE,但是我们有时候也是需要在开发的时候使用 Windows 的命令行,来运行一些独立的程序.在两个程序中切换来切 ...

  9. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

随机推荐

  1. 10K+,深度学习论文、代码最全汇总!

    我们大部分人是如何查询和搜集深度学习相关论文的?绝大多数情况是根据关键字在谷歌.百度搜索.想寻找相关论文的复现代码又会去 GitHub 上搜索关键词.浪费了很多时间不说,论文.代码通常也不够完整.怎么 ...

  2. dubbo常用配置及注意事项

    1.启动时检查缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true. 关闭所有服务的启动时检查:(没有提供者时报错 ...

  3. 【函数】raise 函数(小窗help)

    在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称. 异常名称标识出具体的类: Python异常处理是那些类的对象. 执行raise语句时,Python会创建 ...

  4. SpringBoot 之 MVC

    SpringBoot MVC 和静态资源 首先,我们一定要搞清楚,mvc 配置和 static 配置的联系和区别. mvc 配置其实就是给 spring mvc 框架用的, 具体来说, 比如 @Req ...

  5. python学习笔记之读取配置文件【转自https://my.oschina.net/u/3041656/blog/793467】

    [转自https://my.oschina.net/u/3041656/blog/793467] 最近在接触利用python来写测试框架,本人也是个刚接触python,所以是个小菜鸟,今天开始,一点点 ...

  6. 最流行的Python编辑器/IDEs你认识吗?

    来源商业新知网,原标题:来!带你认识几种最流行的Python编辑器/IDEs(附链接) 大数据文摘授权转载自数据派THU 作者:By Gregory Piatetsky 格雷戈里·皮亚特斯基,KDnu ...

  7. CentOS7双网卡绑定配置

    step1:创建绑定文件 [root@node-1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0 TYPE="bond"BOO ...

  8. FastCGI与PHP

    什么是CGI CGI全称"通用网关接口"(Common Gateway Interface),用于HTTP服务器与其它机器上的程序服务通信交流的一种工具,CGI程序须运行在网络服务 ...

  9. python3 urllib.parse 常用函数

    1.获取url参数 urlparse from urllib import parse url = "https://docs.python.org/3.5/library/urllib.p ...

  10. 通过DOS界面查看电脑上端口使用情况

    如何查看查看端口是否被占用? 打开电脑上的运行,输入cmd,进入DOS界面. 然后输入       netstat -an     即可显示电脑上所用的端口使用情况! 状态显示 LISTENING就表 ...