WinForm开发之取送货管理2
写的有点慢,但都是一步步操作的,希望这些能成为以后宝贵的财富,话不多说,续上次取送货基本信息管理之产品分类管理,下面进行增删改的编写。
增加产品分类管理信息记录,双击[新增]按钮(其新增可让用户在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的更多相关文章
- WinForm开发之取送货管理1
一.取送货管理项目需求 该系统的业务背景如下:客户是一个针织半成品生产加工作坊,有很多生产加工人员从客户工厂那里取走半成品,加工成成品后送回来.客户根据加工每种半成品的加工单价和完成数量,付费用给生产 ...
- 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引
近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开 ...
- 手把手教你使用FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统(附源码)之开篇
一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座, ...
- WinForm开发中通用附件管理控件设计开发参考
1.引言 在WinForm开发中,文件附件的管理几乎在任何一个应用上都会存在,是一个非常通用集中的公共模块.我们日常记录会伴随着有图片.文档等附件形式来展现,如果为每个业务对象都做一个附件管理,或者每 ...
- winform快速开发平台 -> 通用权限管理之动态菜单
这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议. 先说一下我们的权限管理的的设计思路,首先一个企业信息化管理系统一定会用到权限管理, ...
- RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...
- SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework
4.1运行效果: 4.2开发实现: 4.2.1 有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...
- SNF开发平台WinForm之二-开发-单表表单管理页面-SNF快速开发平台3.3-Spring.Net.Framework
2.1运行效果: 2.2开发实现: 2.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...
- Winform开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework
最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...
随机推荐
- Monkey基础
一.Monkey工具简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序 ...
- 10款让WEB前端开发人员更轻松的实用工具
这篇文章介绍10款让Web前端开发人员生活更轻松的实用工具.每个Web开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具,所以如 ...
- Java开发的命名规范
Java的命名规范 定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性,便于日后维护. 1.工程的命名(全用小写字母) 工程的命名一般全用小写字母,单词之间用下划线“_”隔开. 2.包的命 ...
- IPv6测试环境
1.准备机器 三台PC机器,通过1个hub连接,1台windows,安装成双网卡,1个网卡连接外网,1个网卡连接IPv6环网.系统版本:xp sp3 for japan 2台linux机器.操作系统版 ...
- 省市县三级联动(webFrom...DropdownList)
编辑页面 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"&g ...
- 深入理解jQuery中的Deferred
引入 1 在开发的过程中,我们经常遇到某些耗时很长的javascript操作,并且伴随着大量的异步. 2 比如我们有一个ajax的操作,这个ajax从发出请求到接收响应需要5秒,在这5秒内我们可以 ...
- 怎样增强MyEclipse的代码自动提示功能
步骤/方法 1 一 般在Eclipse ,MyEclipse代码里面,打个foreach,switch等 这些,是无法得到代码提示的(不信自己试试),其他的就更不用说了,而在Microsoft Vis ...
- Scala中的None,Nothing,Null,Nil
在scala中这四个类型名称很类似,作用确实完全不同的. None是一个object,是Option的子类型,定义如下 case object None extends Option[Nothing] ...
- mysql存储过程详细教程
记录mysql存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...
- Android开发--仿微信语音对讲录音
原文地址:http://www.2cto.com/kf/201502/378704.html 自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录 ...