using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using ETDExtUI; namespace ETD.Frame { public class ExtControl : BaseControl { System.Web.UI.Control control = new System.Web.UI.Control(); public ExtControl(System.Web.UI.Control con) { control = con; } public override int SetterControl(List<object> entity, string lbl) { //Type ControlType = control.GetType(); //switch (ControlType.Name) //{ // case "TextBox": // if (!string.IsNullOrEmpty((control as TextBox).ID)) // { // foreach (object objj in entity) // { // //Type t = Type.GetType(objj, true); // System.Reflection.PropertyInfo propertyInfo = t.GetProperty((control as TextBox).ID); // if (propertyInfo != null) // { // string tempText = (control as TextBox).Text; // if (!string.IsNullOrEmpty(tempText)) // propertyInfo.SetValue(entity, Convert.ChangeType(tempText, propertyInfo.PropertyType), null); // } // } // } // break; //} #region TextBox TextBox txtcon = new TextBox(); if (string.IsNullOrEmpty(lbl)) lbl = "_"; if (control is TextBox && control.ClientID.Contains(lbl)) { txtcon = (TextBox)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; string str = ""; foreach (object obj in entity) { if (string.IsNullOrEmpty(str)) { try { str = obj.GetType().InvokeMember(fieldName, BindingFlags.GetProperty, null, obj, null).ToString(); //str = obj.GetType().InvokeMember(fieldName, BindingFlags.IgnoreCase | //忽略大小写 指定当绑定时不应考虑成员名的大小写 //BindingFlags.GetProperty, null, obj, null).ToString(); } catch { str = ""; } } else break; } if (!string.IsNullOrEmpty(str)) { txtcon.Text = str; return 0; } } #endregion #region TextArea TextArea txt = new TextArea(); if (control is TextArea && control.ClientID.Contains(lbl)) { txt = (TextArea)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; string str = ""; foreach (object obj in entity) { if (string.IsNullOrEmpty(str)) { try { str = obj.GetType().InvokeMember(fieldName, BindingFlags.GetProperty, null, obj, null).ToString(); } catch { str = ""; } } else break; } if (!string.IsNullOrEmpty(str)) { txt.Text = str; return 0; } } #endregion #region DropDownList DropDownList ddl = new DropDownList(); if (control is DropDownList && control.ClientID.Contains(lbl)) { ddl = (DropDownList)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; string str = ""; try { str = entity.GetType().InvokeMember(fieldName, BindingFlags.GetProperty, null, entity, null).ToString(); } catch { } if (!string.IsNullOrEmpty(str)) { ddl.SelectedValue = str; return 0; } } #endregion #region CheckBox CheckBox chk = new CheckBox(); if (control is CheckBox && control.ClientID.Contains(lbl)) { chk = (CheckBox)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; string str = ""; try { str = entity.GetType().InvokeMember(fieldName, BindingFlags.GetProperty, null, entity, null).ToString(); } catch { } if (!string.IsNullOrEmpty(str)) { if (str == "1") chk.Checked = true; if (str == "0") chk.Checked = false; if (str.ToLower() == "true") chk.Checked = true; if (str.ToLower() == "false") chk.Checked = false; return 0; } } #endregion return 1; } public override List<object> GetterControl(List<object> entity, string lbl) { #region TextBox TextBox txtcon = new TextBox(); List<object> objlist = new List<object>(); // object objj = Activator.CreateInstance(entity.GetType()); if (string.IsNullOrEmpty(lbl)) lbl = "_"; if (control is TextBox && control.ClientID.Contains(lbl)) { txtcon = (TextBox)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; // PropertyInfo[] propertys = objj.GetType().GetProperties(); foreach (object obj in entity) { //object objj = Activator.CreateInstance(obj.GetType()); PropertyInfo pi = obj.GetType().GetProperty(fieldName); if (!object.Equals(pi, null)) { try { if ((Object.Equals(txtcon.Text, null)) || (Object.Equals(txtcon.Text, DBNull.Value))) pi.SetValue(obj, null, null);//为空,但不为Null else pi.SetValue(obj, txtcon.Text, null); } catch { pi.SetValue(obj, null, null);//为空,但不为Null } objlist.Add(obj); } } } #endregion return objlist; } public override T GetterControl<T>(T entity, string lbl) { #region TextBox TextBox txtcon = new TextBox(); List<T> objlist = new List<T>(); T objj = Activator.CreateInstance<T>(); objj = entity; // object objj = Activator.CreateInstance(entity.GetType()); if (string.IsNullOrEmpty(lbl)) lbl = "_"; if (control is TextBox && control.ClientID.Contains(lbl)) { txtcon = (TextBox)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; // PropertyInfo[] propertys = objj.GetType().GetProperties(); PropertyInfo pi = entity.GetType().GetProperty(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase); if (!object.Equals(pi, null)) { try { if ((Object.Equals(txtcon.Text, null)) || (Object.Equals(txtcon.Text, DBNull.Value))) pi.SetValue(objj, null, null);//为空,但不为Null else pi.SetValue(objj, txtcon.Text, null); } catch { pi.SetValue(objj, null, null);//为空,但不为Null } } } #endregion #region TextArea TextArea txt = new TextArea(); if (control is TextArea && control.ClientID.Contains(lbl)) { txt = (TextArea)control; string fieldName = control.ClientID.Split('_')[(control.ClientID.Split('_').Length) - 1]; // PropertyInfo[] propertys = objj.GetType().GetProperties(); PropertyInfo pi = entity.GetType().GetProperty(fieldName); if (!object.Equals(pi, null)) { try { if ((Object.Equals(txt.Text, null)) || (Object.Equals(txt.Text, DBNull.Value))) pi.SetValue(objj, null, null);//为空,但不为Null else pi.SetValue(objj, txt.Text, null); } catch { pi.SetValue(objj, null, null);//为空,但不为Null } } } #endregion return objj; } } }