public AbstractGridEditor Edit(IColumn c) { AbstractGridEditor ctr = c.GetEditControl(); ctr.Width = c.Width - 1; // minus jedna je prave ohraniceni ramecku ctr.Height = this.Height; ctr.Value = this[c.Name]; ctr.RowIndex = this.Index; ctr.ColumnName = c.Name; ctr.CellPadding = c.Padding; if (this.parent_collection.StartEditRow(this)) { OnRowEditStart(); //zavola udalost } return(ctr); }
public override void Refresh() { //prerovna eventualni ovladaci prvky Dictionary <int, AbstractGridEditor> seznam = new Dictionary <int, AbstractGridEditor>(); for (int i = 0; i < this.Controls.Count; i++) { if (this.Controls[i] is AbstractGridEditor) { AbstractGridEditor ctr = (AbstractGridEditor)this.Controls[i]; seznam.Add(ctr.RowIndex, ctr); } } int y = 0; //TODO: zoptimalizovat if (this.Rows != null) { for (int row_index = 0; row_index < this.Rows.Count; row_index++) { if (seznam.ContainsKey(row_index)) { if (row_index >= this.start_index) { seznam[row_index].Visible = true; seznam[row_index].Location = new Point(GetXColPosition(this.Columns[seznam[row_index].ColumnName]) - this.MoveX, y); } else { seznam[row_index].Visible = false; } } if (row_index >= this.start_index) { y += this.Rows[row_index].Height + 1; } } } base.Refresh(); }
protected override void OnDoubleClick(EventArgs e) { base.OnDoubleClick(e); //vzdy je editovatelna jen jedna bunka this.Controls.Clear(); CellPosition pos = this.GetCell(this.PointToClient(MousePosition)); if (!pos.col.ReadOnly) { //this.Rows[pos.row.Index][pos.col.Name]. AbstractGridEditor ctr = pos.row.Edit(pos.col); int y = 0; List <IRow> visible_rows = this.getVisibleRows(); foreach (IRow r in visible_rows) { if (r.Index == pos.row.Index) { break; } y += r.Height + 1; } int x = GetXColPosition(pos.col); ctr.Location = new Point(x, y); ctr.Validators = pos.col.Validators; Controls.Add(ctr); ctr.Focus(); ctr.LostFocus += new System.EventHandler(ctr_LostFocus); ctr.EndEdit += new System.EventHandler(ctr_EndEdit); } }