1.1:创建表结构

新建三张商品关联的表,表模型如下:

创建SQL语句略

1.2:生成表Model(生成方法见上一节)

1.3:生成tb_ProductType的单结构界面然后添加到项目中

1.4:修改GZVIP.Dictionary模块中DictionaryMain类,新增产品类型功能

public class DictionaryMain : ModuleFunctionManage
{ public DictionaryMain()
{
FunPools.AddFunction(typeof(frm_Level), "等级管理", "Level");
FunPools.AddFunction(

typeof(frm_ProductType), "产品类型", "ProductType"

);
}
}

Image添加如下三个图片如下

相应修改frm_ProductType界面

运行重新加载字典管理DLL结果如下:

至此:商品类型添加完毕

接下来生成商品管理

2.1生成tb_Product表的但结构界面并附加到项目

对界面做一些简单设置:

切换到后台代码修改Load代码(红色部分):

private void frm_Product_Load(object sender, EventArgs e)
{
_SummaryView = gv_Summary;
gv_Summary.OptionsView.ColumnAutoWidth = false;
//_bll = new bllBusiness(typeof(tb_Product),"P",4);

_bll = new bllBusiness<tb_Product>("P", , typeof

(tb_ProductPrice));
//添加只读列
base.AddControlsOnlyRead(txtCreateUser,txtCreateDate,txtLastUpdateUser,txtLastUpdateDate);
//只有新增状态下才可用
base.AddControlsOnAddKey(); this.BoundDatasource();
}

修改DoBoundEditData方法

//绑定明细编辑页的数据
public override void DoBoundEditData()
{
//base.DoBoundEditData();

LibraryTools.DoBindingEditorPanel(layoutControl1, EditData.Tables[_bll.SummaryTableName], "txt"

);
gc_Detail.DataSource

=

 EditData.Tables[tb_ProductPrice._TableName];
}

编辑数据编辑页增加按钮和删除按钮两个按钮的点击事件

       //明细表增加
private void btn_DetailAdd_Click(object sender, EventArgs e)
{
//新增一条记录,并设置商品编号
DataRow dr = EditData.Tables[tb_ProductPrice._TableName].Rows.Add();
dr[tb_ProductPrice.ProductID] = txtProductID.EditValue;
}
//明细表删除
private void btn_DetailDelete_Click(object sender, EventArgs e)
{
if (gv_Detail.FocusedRowHandle < ) return;
if (Msg.AskQuestion("确定要删除选中的价格记录吗?") == false) return;
gv_Detail.DeleteSelectedRows();
}

修改DictionaryMain类

public class DictionaryMain : ModuleFunctionManage
{
public DictionaryMain()
{
FunPools.AddFunction(typeof(frm_Level), "等级管理", "Level");
FunPools.AddFunction(typeof(frm_ProductType), "商品类型", "ProductType");
FunPools.AddFunction(

typeof(frm_Product), "商品管理", "Product"

);
}
}

2.2添加产品类别绑定

修改GZVIP.BLL.DastaCache类,增加ProductType只读属性

/// <summary>
/// 产品类别
/// </summary>
public DataTable ProductType
{
get
{
DataTable dt = CommonData.FindFromCache(tb_ProductType._TableName);
if (dt == null)
{
dt = bllDataCommon.GetAllDataTable(tb_ProductType._TableName, Loginer.CurrentLoginer.SystemDBName
, tb_ProductType.ProductTypeID, tb_ProductType.ProductTypeName);
AddToCache(dt.Copy());
}
return dt;
}
}

修改GZVIP.Library.BouindData类,增加BoundProductType()静态方法

/// <summary>
/// 绑定商品类别
/// </summary>
/// <param name="lue"></param>
/// <param name="displayCombination"></param>
/// <param name="ADDNULL"></param>
public static void BoundProductType(LookUpEdit lue, bool displayCombination, bool ADDNULL)
{
lue.Properties.Columns.Clear();
InitializeControl(lue, new string[] { "编号", "名称" }, new string[] { tb_ProductType.ProductTypeID, tb_ProductType.ProductTypeName });
lue.Properties.Columns[].Width = ;
lue.Properties.Columns[].Width = ;
lue.Properties.PopupWidth = ; DataTable dt = DataCache.Cache.ProductType.Copy();
if (ADDNULL) dt = Common.ADDNULL(dt); string displayMember = tb_ProductType.ProductTypeName;
if (displayCombination)
{
Common.AddColumns(dt, tb_ProductType.ProductTypeID, tb_ProductType.ProductTypeName);
displayMember = Common.DefNewColName;
}
DataBinder.BindingLookupEditDataSource(lue, dt, displayMember, tb_ProductType.ProductTypeID);
} /// <summary>
/// 绑定商品类别
/// </summary>
/// <param name="lue"></param>
/// <param name="displayCombination"></param>
/// <param name="ADDNULL"></param>
public static void BoundProductType(CheckedComboBoxEdit lue, bool displayCombination, bool ADDNULL)
{
DataTable dt = DataCache.Cache.ProductType.Copy();
if (ADDNULL) dt = Common.ADDNULL(dt); string displayMember = tb_ProductType.ProductTypeName;
if (displayCombination)
{
Common.AddColumns(dt, tb_ProductType.ProductTypeID, tb_ProductType.ProductTypeName);
displayMember = Common.DefNewColName;
}
DataBinder.BindingCheckedComboBoxSource(lue, dt, displayMember, tb_ProductType.ProductTypeID);
}

在frm_Product的Load事件中添加数据源绑定

private void frm_Product_Load(object sender, EventArgs e)
{
_SummaryView = gv_Summary;
gv_Summary.OptionsView.ColumnAutoWidth = false;
//_bll = new bllBusiness(typeof(tb_Product),"P",4);
_bll = new bllBusiness<tb_Product>("P", , typeof(tb_ProductPrice));
//添加只读列
base.AddControlsOnlyRead(txtCreateUser,txtCreateDate,txtLastUpdateUser,txtLastUpdateDate);
//只有新增状态下才可用
base.AddControlsOnAddKey(); this.BoundDatasource();
} private void BoundDatasource()
{
DataBinderTools.Bound.BoundUserName(lue_UserName);
DataBinderTools.Bound.BoundUserName(txtCreateUser);
DataBinderTools.Bound.BoundUserName(txtLastUpdateUser); DataBinderTools.Bound.BoundProductType(txt_ProductType, false, true);
DataBinderTools.Bound.BoundProductType(txtProductTypeID, true, true);
}

重写ValidateBeforSave方法,用于保存前验证

//保存前数据验证
protected override bool ValidateBeforSave()
{ bool Validate = true &
CommonTools.IsNotEmpBaseEdit(txtProductName, "产品名称不能为空!")
& CommonTools.IsNotEmpBaseEdit(txtProductTypeID, "产品类别编号不能为空!")
& CommonTools.IsNotEmpBaseEdit(txtProductPrice, "默认价格不能为空!");
//if (Validate == false) return;
if (Validate == true)
EditData.Tables[tb_Product._TableName].Rows[][tb_Product.ProductTypeName] = (txtProductTypeID.GetSelectedDataRow() as DataRowView).Row[tb_ProductType.ProductTypeName];
return Validate;
}

重写SetControlAccessable方法,修改状态改变的时候

/// <summary>
/// 设置按钮可用状态,如果已经在ControlOnlyReads或SetControlAccessable中添加,这里不需要重新设置
/// </summary>
/// <param name="Edit"></param>
protected override void SetControlAccessable(bool Edit)
{
//LibraryTools.SetControlAccessable(tp_Edit, Edit);
base.SetControlAccessable(Edit);
gv_Detail.OptionsBehavior.Editable = Edit; }

完成以后运行重新加载模块,测试功能

添加商品到此完结

关于GZFramwork快速开发框架

作者:GarsonZhang  QQ:382237285

唯一QQ交流群:288706356

欢迎提出您的宝贵意见

GZFramwork快速开发框架演练之会员系统(四)添加商品管理的更多相关文章

  1. GZFramwork快速开发框架演练之会员系统(三)添加会员等级管理

    1.设计会员等级表结构 创建语句: from sysobjects where id = object_id('tb_MembersLevel') and type = 'U') drop table ...

  2. GZFramwork快速开发框架演练之会员系统(二)添加字典模块

    开始前请先阅读 GZFramwork快速开发框架之窗体设计说明 第一步:准备模块图片 图片为2张大小分别为16x16和32x32,放在\Debug\images目录下    因为会员管理模块并不多   ...

  3. GZFramwork快速开发框架演练之会员系统(一)框架源码下载

    GZFramwork框架开发环境为.NET 4.0 (必须)   VS2013+SQL2005+DevExpress v13.2.8+FastReport (推荐)  数据库建模工具PowerDesi ...

  4. GZFramwork快速开发框架之窗体设计说明

    1.  明细页数据源获取(基类已经处理) 重载GetEditData方法,此方法为自定义获得明细也的数据源,用于绑定明细页,此返回值会赋值给EditData //根据主键获得数据编辑页的数据 publ ...

  5. ASP.NET快速开发框架、这才是高大上档次后台管理UI界面

    另外献上在<线体验Demo地址>希望大家也能从中得到一些启发.地址:http://121.40.148.178:8080/ . 用户名:guest,密码:123456QQ技术交流群:239 ...

  6. ASP.NET通用权限系统快速开发框架

    系统在线演示地址: http://120.90.2.126:8051 登录账户:system,密码:system### DEMO下载地址: http://download.csdn.net/detai ...

  7. C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入

    C# 嵌入dll   在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...

  8. CRL快速开发框架系列教程四(删除数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. 力软信息化系统快速开发框架 web端+winform端

    力软信息化系统快速开发框架是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新.net信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...

随机推荐

  1. Web前端开发基础 第四课(CSS小技巧)

    水平居中设置-行内元素 我们在实际工作中常会遇到需要设置水平居中场景,今天我们就来看看怎么设置水平居中的. 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align:c ...

  2. BizTalk动手实验(十一)自定义开发管道组件

    1 课程简介 通过本课程熟悉自定义开始管道组件的流程.各组件接口的功能作用以及自定义管道. 本场景为开发一个消息ZIP压缩的发送管道组件. 2 准备工作 1. 熟悉管道组件各阶段组成 2. 下载Ion ...

  3. [转]jni数据类型映射、域描述符说明

    在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 . 在JNI的世界里也存在类似的数据类型,与Java比较起来,其范围更具严格性,如下: 1.primitive types ---- ...

  4. android发送/接收json数据

    客户端向服务器端发送数据,这里用到了两种,一种是在url中带参数,一种是json数据发送方式: url带参数的写法: url+/?r=m/calendar/contact_list&uid=3 ...

  5. 【翻译】How To Tango With Django 1.5.4 第四章

    4.模板和静态媒体 这章讲解模板引擎 4.1使用模板 前面我们讲解了view和url 映射,创建出了django 的web页面,现在就要将模板混合进去 好的网站在布局上总是有许多重复的.django提 ...

  6. 【测试分析】HTSM模型

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5508428.html 概述 HTSM全称Heuristic ...

  7. Sql Server Express连接字符串

    data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\ASPNETDB.MDF;User ...

  8. IE8下JQuery clone 出的select元素使用append添加option异常解决记录

    遇到一个怪现象,由于配置参数是多实例的, 故采用JQuery对模板HTML代码进行clone, HTML代码中包括select标签, 在克隆之后需要对select进行添加option. 在firefo ...

  9. Leetcode: Strong Password Checker

    A password is considered strong if below conditions are all met: It has at least 6 characters and at ...

  10. 刨根问底U3D---Vector3 你到底是蔬菜呢还是水果呢?

    事情的起因还是因为一段代码,因为在做一个2D TileBase的游戏 所以需要有一个简单的 Tile坐标到世界坐标的变换 public static Vector3 GetTileWorldPosBy ...