winform控件批量赋值

上次我是在Form窗体的后台进行循环,将数据绑定到控件上的,但是,这样不利于简化代码量,今天我重新将代码抽出来,整理成一个类

前台调用:

 Test t = new Test();
            t.SystemName = "SystemName";
            t.ServerAddress = "192.168.1.1";
            this.Fill<Test>(t, this.searchPanel);

这里直接this可以调用,是我将原本窗体继承自Form改为了继承自我的帮助类(控件帮助类继承Form),控件帮助类中的代码,如下:

 protected void Fill<T>(T dto, Control control)
        {
            JsonCollect.Instance.FillToControl(JsonConvert.SerializeObject(dto), control);
        }
FillToControl方法是一个专门用来收集控件的自定义类,代码如下:
  public void FillToControl(string result, Control control)
        {
            JObject JResult = JsonConvert.DeserializeObject<JObject>(result);
            foreach (Control item in control.Controls)
            {
                ExplainElement(JResult, result, item);
            }
        }


  /// <summary>
        /// 将JSON 元素解释道具体的控件上
        /// </summary>
        /// <param name="JResult"></param>
        /// <param name="result"></param>
        /// <param name="uIElement"></param>
        private void ExplainElement(JObject JResult, string result, Control control)
        {
            if (control is TextBox)
            {
                TextBox textBox = control as TextBox;
                if (textBox.Name.ToLower().StartsWith("txt_"))
                {
                    if (JResult != null && JResult[textBox.Name.Replace("txt_", string.Empty)] != null)
                    {
                        textBox.Text = JResult == null ||
                            JResult[textBox.Name.Replace("txt_", string.Empty)] == null ? "" :
                            JResult[textBox.Name.Replace("txt_", string.Empty)].ToString();
                    }
                    else
                    {
                        MessageBox.Show("数据集中没有[{" + textBox.Name.Replace("txt_", string.Empty) + "}]字段,无法填充");
                    }
                }
            }
        }

上面的代码,最重要的一点就是要命名规则一定要规范

 

 

posted @ 2019-12-11 13:46  xiao小智  阅读(867)  评论(0编辑  收藏  举报