private void ProcessItemValueChanged(MemberWrapper sender) { m_modified = true; // Set the "modified" flag in each property that's visible in the grid, then clear the cache. // (This needs to be done for all properties, because any of them may have changed as a result of one // value changing.) If the value was modified then RefreshIfExpanded() collapses and re-expands the // row to show the new value (which may have a different number of child properties than the old value). foreach (MemberWrapper wrapper in m_properties) { wrapper.SetModified(); wrapper.ClearCache(); } sender.Modified = true; // Check all the expanded members. Any one of them may now have completely different members, // so they need to be collapsed and re-expanded (unless the value was cahnged to null). DataGridExpandableColumn column = NameColumn; // Cannot use foreach here, because some elements may be removed from the collection as // we're iterating over it. for (int index = 0; index < m_properties.Count; index++) { MemberWrapper wrapper = (MemberWrapper)m_properties[index]; column.RefreshIfExpanded((CellEditorData)wrapper.Tag); } // Invalidate the column to hide any + buttons that should no longer be shown and re-display // the values. column.Invalidate(); }
private void InitialiseDataGrid() { DataGridTableStyle tableStyle = new DataGridTableStyle(); DataGridExpandableColumn nameColumn = new DataGridExpandableColumn(); nameColumn.ReadOnly = true; nameColumn.MappingName = m_nameColumnMappingName; nameColumn.HeaderText = NameColumnHeaderText; nameColumn.Width = 100; nameColumn.Expand += new MemberWrapperEventHandler(nameColumn_Expand); nameColumn.Collapse += new MemberWrapperEventHandler(nameColumn_Collapse); tableStyle.GridColumnStyles.Add(nameColumn); if (ShowMemberTypeColumn) { DataGridTextBoxColumn memberTypeColumn = new DataGridTextBoxColumn(); memberTypeColumn.ReadOnly = true; memberTypeColumn.MappingName = m_memberTypeColumnMappingName; memberTypeColumn.HeaderText = "Member Type"; memberTypeColumn.Width = 150; tableStyle.GridColumnStyles.Add(memberTypeColumn); } DataGridTextBoxColumn valueTypeColumn = new DataGridTextBoxColumn(); valueTypeColumn.ReadOnly = true; valueTypeColumn.MappingName = m_valueTypeColumnMappingName; valueTypeColumn.HeaderText = "Value Type"; valueTypeColumn.Width = 150; tableStyle.GridColumnStyles.Add(valueTypeColumn); DataGridEditorColumn editorColumn = new DataGridEditorColumn(); editorColumn.MappingName = m_editorColumnMappingName; editorColumn.HeaderText = "Value"; editorColumn.NullText = "<null>"; tableStyle.GridColumnStyles.Add(editorColumn); tableStyle.HeaderForeColor = SystemColors.ControlText; tableStyle.RowHeadersVisible = false; tableStyle.MappingName = typeof(MemberWrappers).Name; tableStyle.DataGrid = this.grid; grid.TableStyles.Add(tableStyle); nameColumn.Initialise(); editorColumn.Initialise(); editorColumn.EditorCommitted += new MemberWrapperEventHandler(editorColumn_EditorCommitted); m_initialised = true; }