写的有点慢,但都是一步步操作的,希望这些能成为以后宝贵的财富,话不多说,续上次取送货基本信息管理之产品分类管理,下面进行增删改的编写。

增加产品分类管理信息记录,双击[新增]按钮(其新增可让用户在TextBox上可输入,并不是将信息添加到数据库的过程,在[保存]按钮上才在数据库中进行信息的添加与修改),在编写buttonAdd_Click事件之前,根据需求没有点击新增或选择修改项,TextBox上不可编辑的,所以编写了使panel中所有控件生效,无效,可视方法。代码如下:

        public static void ControlsInPanelEnable(Panel panel)
{
for (int i = ; i < panel.Controls.Count; i++)
{
if (panel.Controls[i] is TextBox)
{
(panel.Controls[i] as TextBox).Enabled = true;
(panel.Controls[i] as TextBox).Text = "";
}
if (panel.Controls[i] is RichTextBox)
{
(panel.Controls[i] as RichTextBox).Enabled = true;
(panel.Controls[i] as RichTextBox).Text = "";
}
if (panel.Controls[i] is ComboBox)
{
(panel.Controls[i] as ComboBox).Enabled = true;
(panel.Controls[i] as ComboBox).Text = "";
}
if (panel.Controls[i] is DateTimePicker)
{
(panel.Controls[i] as DateTimePicker).Enabled = true;
(panel.Controls[i] as DateTimePicker).Text = "";
}
if (panel.Controls[i] is PictureBox)
{
(panel.Controls[i] as PictureBox).Enabled = true;
(panel.Controls[i] as PictureBox).Text = "";
}
}
}

使panel中所有控件无效和有效不清空所选记录信息的方法的实现与上述代码相似,参考代码可下载代码。

在Load事件中先写下控件文本不可编辑,即panel中的所有控件无效,代码如下:

        private void Frm_ProductType_Load(object sender, EventArgs e)
{
ControlsInPanelDisable(this.panel1);
}

然后实现触发buttonAdd_Click事件,代码编写如下:

        private void buttonAdd_Click(object sender, EventArgs e)
{
m_strOperationType = "add";
ControlsInPanelEnable(this.panel1);
m_CK_ProductTypeID = -;//使添加记录后,不指向任何记录
}

在进行[修改]按钮双击事件的编写时,有得到鼠标在dataGridView1单元格选中的信息,得到信息就得知道表的主键,方法在dataGridView1_CellMouseClick事件得到,代码如下:

        //将信息显示到控件上
private void cellclick()
{
TSM.Model.CK_ProductType modelCK_ProductType = m_bllCK_ProductType.GetModel(m_CK_ProductTypeID); if (modelCK_ProductType != null)
{
this.textBoxCateName.Text = modelCK_ProductType.CK_ProductTypeName;
}
else
{
this.textBoxCateName.Text = "";
}
} private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
string strID = this.dataGridView1.Rows[this.dataGridView1.CurrentCell.RowIndex].Cells[].Value.ToString();
m_CK_ProductTypeID = int.Parse(strID);
ControlsInPanelDisable(this.panel1);
cellclick();
m_strOperationType = "";
}

[修改]按钮的触发事件实现代码:

        private void buttonModify_Click(object sender, EventArgs e)
{
if (m_CK_ProductTypeID == -)
{
MessageBox.Show("请选中一条信息", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
ControlsInPanelDisable(this.panel1);
m_strOperationType = "";
return;
}
ControlsInPanelEnableNotClear(this.panel1);
m_strOperationType = "edit";
}

下面是[保存]按钮的触发事件,代码如下:

        //将控件上的信息赋值给对象的属性里
private void setInfo(ref TSM.Model.CK_ProductType modelCK_ProductType)
{
modelCK_ProductType.CK_ProductTypeName = textBoxCateName.Text;
} private void buttonSave_Click(object sender, EventArgs e)
{
if (m_strOperationType == "add")//增加
{
//new 一个 TSM.Model.CK_ProductType 对象
TSM.Model.CK_ProductType modelCK_ProductType = new TSM.Model.CK_ProductType();
setInfo(ref modelCK_ProductType); int nId = m_bllCK_ProductType.Add(modelCK_ProductType);
ControlsInPanelDisable(this.panel1);
m_CK_ProductTypeID = nId; ShowAllRecords(m_strWhere);
MessageBox.Show("数据添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if(m_strOperationType == "edit")
{
//从bll层根据Id得到model层的实例对象
TSM.Model.CK_ProductType modelCK_ProductType = m_bllCK_ProductType.GetModel(m_CK_ProductTypeID);
setInfo(ref modelCK_ProductType); m_bllCK_ProductType.Update(modelCK_ProductType);
ShowAllRecords(m_strWhere);
ControlsInPanelDisable(this.panel1);
MessageBox.Show("数据添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
m_strOperationType = "";
m_CK_ProductTypeID = -;
}

下面是[保存]按钮的触发事件,代码如下:

        private void buttonDelete_Click(object sender, EventArgs e)
{
if (m_bllCK_ProductType.GetModel(m_CK_ProductTypeID) == null)
{
MessageBox.Show("请选中一条信息", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
DialogResult dr = MessageBox.Show("确实要删除该记录么,删除该记录可能会连带删除其他表记录!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.Cancel)
{
return;
}
m_bllCK_ProductType.Delete(m_CK_ProductTypeID);
ShowAllRecords(m_strWhere); MessageBox.Show("数据删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }

总结:在增加和更新数据时,都要得到model层的实例,如:m_bllCK_ProductType.Add(modelCK_ProductType);

在得到model层实例和删除数据时,要得到数据表的主键,如:modelCK_ProductType = m_bllCK_ProductType.GetModel(CK_ProductTypeID);

前两节代码

编程是一个熟练的过程,不能光看,也不能理解了就认为会了,就算在简单的代码也要敲几遍,不用多,理解熟练了就好,可能现在的你看都不懂,动起手来自己敲敲,运行看看,出一些错误,总是有收获的,这是我的理解,我还在体会这一过程,希望与君同行,不说成为社会做多大贡献,只说为了更好的生活。

WinForm开发之取送货管理2的更多相关文章

  1. WinForm开发之取送货管理1

    一.取送货管理项目需求 该系统的业务背景如下:客户是一个针织半成品生产加工作坊,有很多生产加工人员从客户工厂那里取走半成品,加工成成品后送回来.客户根据加工每种半成品的加工单价和完成数量,付费用给生产 ...

  2. 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引

    近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开 ...

  3. 手把手教你使用FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统(附源码)之开篇

    一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座, ...

  4. WinForm开发中通用附件管理控件设计开发参考

    1.引言 在WinForm开发中,文件附件的管理几乎在任何一个应用上都会存在,是一个非常通用集中的公共模块.我们日常记录会伴随着有图片.文档等附件形式来展现,如果为每个业务对象都做一个附件管理,或者每 ...

  5. winform快速开发平台 -> 通用权限管理之动态菜单

    这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议. 先说一下我们的权限管理的的设计思路,首先一个企业信息化管理系统一定会用到权限管理, ...

  6. RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)

    RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...

  7. SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework

    4.1运行效果: 4.2开发实现: 4.2.1          有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...

  8. SNF开发平台WinForm之二-开发-单表表单管理页面-SNF快速开发平台3.3-Spring.Net.Framework

    2.1运行效果: 2.2开发实现: 2.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...

  9. Winform开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework

    最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...

随机推荐

  1. Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈

    本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam ...

  2. Hibernate框架简单应用

    Hibernate框架简单应用 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...

  3. 9、SQL Server 操作数据

    插入数据 使用Insert Into 插入 if(exists(select * from sys.databases where name = 'webDB')) drop database web ...

  4. 【转载】 C++多继承中重写不同基类中相同原型的虚函数

    本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: ...

  5. git命令解析

    一 常用命令 1..gitignore 文件为git忽略文件,例*.[oa] *.~ 为忽略.a或.o或.~结尾的文件./表示忽略目录,!表示反取, *表示匹配零个或者多个字符.?表示匹配一个字符. ...

  6. solrCloud的两种部署方式

    solrcloud 的部署其实有两种方式可选,那么我们在实践开发中应该怎样选择呢? 第一种:当启动solr服务器时,内嵌的启动一个Zookeeper服务器,然后将这些内嵌的Zookeeper服务器组成 ...

  7. RequireJS基础(二)

    上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute. RequireJS使用define来定义 ...

  8. smbclient提示NT_STATUS_INSUFFICIENT_RESOURCES

    Rhel6中使用smbclient命令打开windows共享文件夹,出现: Linux Samba protocol negotiation failed: NT_STATUS_INSUFFICIEN ...

  9. 使用FreePic2Pdf导出书签至Word建立层级目录——快速初始化Word笔记本目录

    使用FreePic2Pdf导出书签至Word建立层级目录 --快速初始化Word笔记本目录 文:安徽师范大学2014级计算机科学与技术 王昊 (Get Contact:441301158@qq.com ...

  10. .Net字符串替换

    在.Net中,有些地方需要进行字符的替换才能实现一些相关功能,这里是一个简单的字符串替换的方法 //如下,变量strWhere中是通过一些方法获取的sql拼接的条件语句,但在数据库中是多表查询,有同名 ...