前些天要完成一个winform程序,里面涉及到动态控件的添加以及保存动态空间中数据的保存,效果如下

初始化时:

点击添加阶梯价后:(点击一下,动态添加一行)

那么接下来,我们就具体的讲下代码实现:

首先是动态添加控件(需要什么控件,都可以动态添加,思路都一样),我这里写了一个专门动态创建控件的函数btn_create_Click,当点击上图的“添加阶梯价”按钮的时候就执行该函数。函数代码如下:

#region 动态创建价格梯度
private void btn_create_Click(object sender, EventArgs e)
{
try
{
TextBox tb = new TextBox();
TextBox tb1 = new TextBox();
Label lb = new Label();
Label lb1 = new Label();
lb1.Text = "价格为:";
lb.Text = "当数量为:";
//设置控件属性和名称,其中全局变量“j”(初始值为0)是为了给每一个动态产生的控件命名,方便以后处理每个动态产生的控件;
j++;
tb.Name = "txt_number_" + j;
tb1.Name = "txt_discount_" + j;
tb.Width = ;
tb1.Width = ;
//设定位置,确定控件显示的位置。
tb.Top = + j * ;
tb.Left = ;
tb1.Top = + j * ;
tb1.Left = ;
lb.Top = + j * ;
lb.Left = ;
lb1.Top = + j * ;
lb1.Left = ;
//添加控件 , ProductPrice是一个GroupBox组件,我动态产生的控件都放在了GroupBox中,布局的需要。
this.ProductPrice.Controls.Add(lb);
this.ProductPrice.Controls.Add(tb);
this.ProductPrice.Controls.Add(lb1);
this.ProductPrice.Controls.Add(tb1);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#endregion

接下来就是将动态控件中的数据进行保存,思路很简单,以下在代码中说明:(提醒,下边的代码都是为了实现我的功能进行的逻辑处理,大家的功能逻辑肯定不一样,所以建议大家只是能够明白怎么赋值保存的思路就可以了)

//声明一个价格梯度的泛型,用来接收阶梯价的数据
Product product_entity = new Product();
#region 将动态控件中相应的数据赋值给对应的对象字段
int control_num = ;
Control ctl_1=new Control(), ctl_2 = new Control() ;//控件对象
List<Entity.VAERP.ProductPrice> prices = new List<Entity.VAERP.ProductPrice>();//声明阶梯价的类实体,用来接收数据
int a = ;//记录数量控件状态
int b = ;//记录价格控件状态
/// [扩展属性] 产品价值
foreach (Control ctl in this.ProductPrice.Controls)
{
          //判断符合条件且对应的动态控件
if (ctl.GetType().ToString() == "System.Windows.Forms.TextBox" &&ctl.Name!= "tbox_baseprice")
{
control_num++;
if (control_num % != )
{
ctl_1 = ctl;
a = ;
}
if (control_num % == )
{
ctl_2 = ctl;
b = ;
}
            //当a,b都为1的时候,说明获取到了对应的数量和价格,把对应的这一组数量和价格添加到类实体
if (a==&&b==)
{
prices.Add(new Entity.VAERP.ProductPrice
{
ProductID = "",
ID = ,
Quantity = int.Parse(ctl_1.Text),
Percent = decimal.Parse(ctl_2.Text) / product_entity.BasePrice
});
              //设置为0,寻找下一组对应的数量价格。
a = ;
b = ;
}
}
}
        //获取到了所有组数据,赋值给产品实体 并插入
product_entity.Prices = prices.ToArray();
       insert(product_entity); #endregion

winfrom之动态控件生成以及保存动态空间的数据的更多相关文章

  1. c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”

    ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述     相关代码 using System; us ...

  2. c++调用matlab生成的Dll动态连接库

    点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R ...

  3. C#动态生成Word文档并填充数据

    C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...

  4. c++ Message与Folder 拷贝 析构(没有动态空间的类)

    c++ Message与Folder 拷贝 析构(没有动态空间的类) 1.两个类里边分别保存一个对方的set表,当前类有拷贝或者销毁时需要更新另一个类的set表. 2.两个类都需要访问对方的priva ...

  5. asp.net.web如何简单生成和保存二维码图片的例子

    首先,要有生成二维码图片,需要二维码生成的类库,到官网下载thoughtWorks.QRCode.dll 例子的步骤: 1.创建项目QRCodeTest1,选择asp.net.web窗体应用程序

  6. Winform窗体实现简单的二维码生成和保存

    二维码的生成需要用到二维码生成的类库,ThoughtWorks.QRCode.dll 步骤: 第一步:下载二维码生成类库,ThoughtWorks.QRCode.dll 第二步:新建winform项目 ...

  7. ArcGIS发布动态空间,并验证

    发布 发布方法见视频. 验证 发布动态空间后,页面底部有 点进去后,使用如下语法验证. {"id": 0,"source": {"type" ...

  8. php CI如何实现全站静态生成html,动态创建目录

    php CI如何实现全站静态生成html,动态创建目录CodeIgniter框架生成HTML的方法 public function out_html($code) { $data['articles' ...

  9. vue根据后端菜单自动生成路由(动态路由)

    vue根据后端菜单自动生成路由(动态路由) router.js import Vue from 'vue' import Router from 'vue-router' import store f ...

随机推荐

  1. C++学习3

    C++仍然在使用C语言的 char.int.long 等基本数据类型,它们在现代操作系统(Windows XP.Win7.Win10 等)中的长度如下表所示: longlong是C99新增的一种数据类 ...

  2. 在MS CRM 4.0中引用JS文件

    引用: http://blog.csdn.net/qzw4549689/article/details/6027987 1.编写好JS代码,在ISV目录下新建一个目录javascripts,将JS文件 ...

  3. 关于JavaScript中apply与call的用法意义及区别(转)

    JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. cal ...

  4. Java 线程间通讯(共享变量方式)

    Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...

  5. delphi TServerSocket阻塞线程单元 实例

    TServerSocket阻塞线程单元,希望对你有所帮助.需要注意的是:1.如果你使用TServerSocket的stNonBlocking模式,重写TServerClientThread线程时要重载 ...

  6. (easy)LeetCode 232.Implement Queue using Stacks

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  7. 9. Palindrome Number

    /* Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers ...

  8. 剑指offer习题集

    1.重载赋值运算符函数:(具体见代码) //普通做法 CMyString& CMyString::operator=(const CMyString& str) { if (this ...

  9. UI_RD协作开发流程

    1. 背景 由于android端需要进行多屏幕适配,这就给UI&RD之间的沟通产生了一些困难.我下面将会对这两种角色的沟通,说明了一下我们项目中沟通的方式和规则. 原则:客户端跟UI约定了各种 ...

  10. WTL在Win8.1系统WM_DROPFILES无法响应的解决办法

    由于UAC的限制,WM_DROPFILES只能由权限较低的APP拖拽到权限较高的APP,反之如果从权限较高的APP拖拽到低权限的APP上,WM_DROPFILES不会被发送到低权限的APP消息队列.所 ...