//------------------------------------------------------------------------------------- /// <summary> /// Перестраивает панель детализации. /// </summary> private void RebuildDetail() { try { foreach(DataGridViewColumn col in fdgv.Columns) if(col.Visible == false) { if(panelDetail.Controls.IndexOfKey(col.Name) != -1) continue; DetailColumnViewControl c = new DetailColumnViewControl(); c.Name = col.Name; c.Caption = col.HeaderText; panelDetail.Controls.Add(c); c.Dock = DockStyle.Top; c.BringToFront(); } else { if(panelDetail.Controls.IndexOfKey(col.Name) != -1) panelDetail.Controls.RemoveByKey(col.Name); } List<Control> toDel = new List<Control>(); foreach(Control c in panelDetail.Controls) if(fdgv.Columns.Contains(c.Name) == false) toDel.Add(c); foreach(Control c in toDel) panelDetail.Controls.Remove(c); } catch(Exception Err) { ErrorBox.Show(Err); } }
//------------------------------------------------------------------------------------- #region << Controls Handlers >> void fdgv_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e) { try { if(isInit) return; if(e.StateChanged == DataGridViewElementStates.Visible) if(e.Column.Visible == false) { DetailColumnViewControl c = new DetailColumnViewControl(); c.Name = e.Column.Name; c.Caption = e.Column.HeaderText; c.ButtonHidePressed += new EventHandler(detailColumnViewControl_ButtonHidePressed); panelDetail.Controls.Add(c); c.Dock = DockStyle.Top; c.BringToFront(); if(fdgv.CurrentRow != null) if(e.Column.ValueType == typeof(bool)) c.Text = ((bool)fdgv.CurrentRow.Cells[e.Column.Index].Value ? "Да" : "Нет"); else if(typeof(Image).IsAssignableFrom(e.Column.ValueType)) c.Text = fdgv.CurrentRow.Cells[e.Column.Index].Value.ToString(); else c.Text = fdgv.CurrentRow.Cells[e.Column.Index].FormattedValue.ToString(); } else if(panelDetail.Controls.ContainsKey(e.Column.Name)) panelDetail.Controls.RemoveByKey(e.Column.Name); } catch(Exception Err) { ErrorBox.Show(Err); } }