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

增加产品分类管理信息记录,双击[新增]按钮(其新增可让用户在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. Broadcom以太网交换芯片培训

      目录 1.交换芯片架构....................................................................................... ...

  2. ShellExecute —— 运行一个外部程序

    原型参数 注意事项:使用该函数时,需添加该头文件:[1]  #include <shellapi.h> ShellExecute函数原型及参数含义如下: ShellExecute( hWn ...

  3. git入门札记

    分布式版本控制(个人主机即版本库,有一台作为“中央服务器”来方便“交换”修改,管理修改 而非文件) vs.  SVN CVS git 安装后设置: git config - -global user. ...

  4. Productivity Power Tools 动画演示(转)

    Productivity Power Tools 是微软官方推出的 Visual Studio 扩展,被用以提高开发人员生产率.它的出现一定程度上弥补和完善了 Visual Studio 自身的不足, ...

  5. 给VMware下的Linux扩展磁盘空间(以CentOS6.5为例)

    #查看挂载点:df -h#显示: 文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/vg_dc01-lv_root47G 12G 34G 25% /tmpfs 504M 88K 50 ...

  6. maven本地安装jar包同时生成pom文件

    maven 本地安装jar包:mvn install:install-file -Dfile=本地路径/ojdbc12.jar -DgroupId=com.oracle -DartifactId=oj ...

  7. AIX 环境下动态路由

    IBM AIX v5.3操作系统环境下动态路由配置如下: 1,用命令lssrc -S routed和lssrc -S gated分别检查routed和gated子系统是是活动状态.如果这两个子系统为活 ...

  8. Google V8编程详解附录

    Google V8编程详工具函数 头文件:utils.h #ifndef UTILS_H_ #define UTILS_H_ #include "v8.h" #include &l ...

  9. 路由器TL-WR941N V5.1:救砖、MOD

    完成效果图: --- 拆芯片时需要贴上胶带,防止误伤: --- 堆锡拆除旧的flash芯片: --- 购入物品: --- 编程器刷入Breed: --- Web刷机: --- 预处理材料: --- 7 ...

  10. Rust的力量

    大约3年前,学习了一个星期的Go语言,然后就没有然后了. Go里面的有些东西设计很新颖,但是缺点也很明显. 上个周末,看了2个小时的Rust,我觉得Rust完全完胜Go语言. 再看Rust的定位,可以 ...