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

增加产品分类管理信息记录,双击[新增]按钮(其新增可让用户在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. 重置zend studio 默认设置的方法

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

  2. redis集群同步迁移方法(二):通过redis-migrate-tool实现

    前篇介绍的redis replication方法,操作步骤多,而且容易出错.在git上看到一些开源工具也能实现同步迁移功能,而且步骤简单,比如redis-port,redis-migrate-tool ...

  3. ArcGIS api fo silverlight学习一(silverlight加载GeoServer发布的WMS地图)

    最好的学习资料ArcGIS api fo silverlight官网:http://help.arcgis.com/en/webapi/silverlight/samples/start.htm 一. ...

  4. Mac下命令行中用sublime打开指定文件 设置方法

    sublime2版本 官网提供的方法:sublime2 官网提供的方法是:ln -s "/Applications/Sublime Text 2.app/Contents/SharedSup ...

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

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

  6. Hadoop HDFS编程 API入门系列之RPC版本1(八)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.RPC.rpc1; import java.io.IOException;import java. ...

  7. 一个C#语法高亮插件

    语法高亮对程序员阅读代码来说有着不小的帮助,虽然VisualStudio本身支持C#语法高亮,但也只是对关键字.类名.字符串等少数元素加了标记,而我们代码中主题:变量.函数.属性.事件等都没有进行高亮 ...

  8. prolog 规则

    规则 规则由几个互相依赖的简单句(谓词)组成.用来描述事实之间的依赖关系,如:因果关系,蕴含关系,对应关系 规则的实质就是存储起来得查询 其语法结构如下: head:-body head 为谓词的定义 ...

  9. PHP中使用cURL实现Get和Post请求的方法

    1.cURL介绍  cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特 ...

  10. shared memory realm does not exist

    有天启动ORACLE,碰到如下问题 提示ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist 解决 ...