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

增加产品分类管理信息记录,双击[新增]按钮(其新增可让用户在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开发--数据库(更新或者降低版本)

    Andoird的SQLiteOpenHelper类中有一个onUpgrade方法. 1. 帮助文档里说的"数据库升级"是指什么? 你开发了一个应用,当前是1.0版本.该程序用到了数 ...

  2. 重置zend studio 默认设置的方法

    转载自:http://www.zendstudio.net/archives/reset-the-zend-studio-settings/ 这个方法类似于手机的"恢复出厂设置"的 ...

  3. java二

    一,面向对象 面向对象,似乎是太抽象了点,没人敢拍着胸脯说我面向对象学到了100%,纵然如此,了解面向对象的思想对于学好java等面向对象编程语言有着莫大的好处,因为一通百通,同样是面向对象,等你精通 ...

  4. 命令与文件的查询 which whereis locate find

    一:which which查找脚本文件也就是我们的系统命令 用法:which [command] 默认根据我们PATH路径去查找,但是不同的用户肯定设置不同的PATH,所以就像普通用户查找不到一些/s ...

  5. 多行SQL语句拼成一条数据

    将多条数据组合到一行 ) set @sql='select ''roleinfo:''' ) declare cursor1 cursor for select id from Userrole wh ...

  6. Centos下安装Mongodb

    转自:http://nnzhp.cn/article/10/ Mongodb是一种nosql类型的数据库,高性能.易部署.易使用的特点在IT行业非常流行. 下面介绍一下mongodb的安装方式,这里我 ...

  7. springboot 使用c3p0数据库连接池的方法

    使用springboot开发时,默认使用内置的tomcat数据库连接池,经常碰到这种情况:运行时间一长,数据库连接中断了.所以使用c3p0连接池吧. 引入的maven依赖: <dependenc ...

  8. ubuntu14.04 upgrade出现【Ubuntu is running in low-graphics mode】问题的一个解决办法

    在ubuntu14.04上安装docker的时候,由于眼花没看清下图这句话: 直接执行了sudo apt-get upgrade命令.然后发生了一个悲剧! 重启后出现下面这个错误! 而且在点击OK进入 ...

  9. Kafka深入理解-1:Kafka高效的文件存储设计

    文章摘自:美团点评技术团队  Kafka文件存储机制那些事 Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日 ...

  10. offer

    八月份仿真实验室国赛以后,我并没有开始做一些关于找工作的准备,而是在做自己感兴趣的cocos2d-x,大概花了一个星期的时间从安装平台到查资料写了一个flappybird小游戏,将近开学了才把找工作的 ...