一、需求描述
要完成一个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 = 200; tb1.Width = 200; //设定位置,确定控件显示的位置。 tb.Top = 30 + j * 30; tb.Left = 250; tb1.Top = 30 + j * 30; tb1.Left = 650; lb.Top = 35 + j * 30; lb.Left = 150; lb1.Top = 35 + j * 30; lb1.Left = 550; //添加控件 , 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 = 0; Control ctl_1=new Control(), ctl_2 = new Control() ;//控件对象 List<Entity.VAERP.ProductPrice> prices = new List<Entity.VAERP.ProductPrice>();//声明阶梯价的类实体,用来接收数据 int a = 0;//记录数量控件状态 int b = 0;//记录价格控件状态 /// [扩展属性] 产品价值 foreach (Control ctl in this.ProductPrice.Controls) {
//判断符合条件且对应的动态控件 if (ctl.GetType().ToString() == "System.Windows.Forms.TextBox" &&ctl.Name!= "tbox_baseprice") { control_num++; if (control_num % 2 != 0) { ctl_1 = ctl; a = 1; } if (control_num % 2 == 0) { ctl_2 = ctl; b = 1; }
//当a,b都为1的时候,说明获取到了对应的数量和价格,把对应的这一组数量和价格添加到类实体 if (a==1&&b==1) { prices.Add(new Entity.VAERP.ProductPrice { ProductID = "", ID = 0, Quantity = int.Parse(ctl_1.Text), Percent = decimal.Parse(ctl_2.Text) / product_entity.BasePrice });
//设置为0,寻找下一组对应的数量价格。 a = 0; b = 0; } } }
//获取到了所有组数据,赋值给产品实体 并插入 product_entity.Prices = prices.ToArray();
insert(product_entity);
#endregion