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) + "}]字段,无法填充"); } } } }
上面的代码,最重要的一点就是要命名规则一定要规范