public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (context != null && context.Instance is DataGridView && provider != null) { ColumnMember[] array = value as ColumnMember[]; HybridDictionary hybridDictionary = new HybridDictionary(10); if (array != null && array.Length > 0) { for (int i = 0; i < array.Length; i++) { if (!hybridDictionary.Contains(array[i].ColumnName)) { hybridDictionary.Add(array[i].ColumnName, array[i].Member); } } } DataGridView dataGridView = (DataGridView)context.Instance; ArrayList arrayList = new ArrayList(); foreach (DataGridViewColumn column in dataGridView.Columns) { string dataPropertyName = column.DataPropertyName; if (dataPropertyName.Trim() != string.Empty) { arrayList.Add(new ColumnMember(column.Name, column.DataPropertyName)); } } if (arrayList.Count > 0) { value = new ColumnMember[arrayList.Count]; arrayList.CopyTo((ColumnMember[])value); } } return(base.EditValue(context, provider, value)); }
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(InstanceDescriptor) && value is ColumnMember) { Type[] types = new Type[2] { typeof(string), typeof(string) }; ColumnMember columnMember = (ColumnMember)value; object[] arguments = new object[2] { columnMember.ColumnName, columnMember.Member }; return(new InstanceDescriptor(typeof(ColumnMember).GetConstructor(types), arguments)); } return(base.ConvertTo(context, culture, value, destinationType)); }
private void Initialize() { if (m_columnMembers == null) { ArrayList arrayList = new ArrayList(); foreach (DataGridViewColumn column in m_dgv.Columns) { if (column.DataPropertyName.Trim() != string.Empty) { ColumnMember value = new ColumnMember(column.Name, column.DataPropertyName.Trim()); arrayList.Add(value); } } if (arrayList.Count > 0) { m_columnMembers = (arrayList.ToArray(typeof(ColumnMember)) as ColumnMember[]); } else { m_columnMembers = new ColumnMember[0]; } } m_complex = new bool[m_columnMembers.Length]; for (int i = 0; i < m_columnMembers.Length; i++) { string text = m_columnMembers[i].Member.Trim(); if (text == "this" || text.IndexOf(".") >= 0) { m_complex[i] = true; } else { m_complex[i] = false; } } m_infos = new PropertyInfo[m_columnMembers.Length]; }