hi aravindh...i am facing same problem... if u have got any solution please let me know.
I have added it on form and trying to initiatize it.but it fails at GetFormattedValue function. it throws exception in its return statement. FormatException. On Apr 20, 11:56 am, Aravindh Kathir <[email protected]> wrote: > Hi, > > I am Developing a Windows Application in VB.NET. In Which one of the > Windows Form will Display data in DataGridView Control. I Need a Checked > DropDownList Column in DataGridView. > > For this process i have Created a Custom Control (Checked DropDownList > Control), But if i add that control in to the > DataGridview Control i am unable to access that control in Datagridview both > inGUI and Code. > The Following are code, please point out the problem that i have done.. > > / *------------------------------------------------------ Code Starts > Here > ---------------------------------------------------------------------------------------------- > * / > > using System; > > using System.Collections.Generic; > > using System.Text; > > using System.Windows.Forms; > > using System.Collections; > > using System.Drawing; > > namespace dgdCheckedListBox > > { > > public class CheckedListBoxColumn : DataGridViewColumn > > { > > public CheckedListBoxColumn() > > : base(new CheckedListBoxCell()) > > { > > } > > public override DataGridViewCell CellTemplate > > { > > get > > { > > return base.CellTemplate; > > } > > set > > { > > if (value != null && > > !value.GetType().IsAssignableFrom(typeof(CheckedListBoxCell))) > > { > > throw new InvalidCastException("Must be a CheckedListBoxCell"); > > } > > base.CellTemplate = value; > > } > } > } > > public class CheckedListBoxCell : DataGridViewCell > > { > > public CheckedListBoxCell() > > : base() > > { > > } > > public override void InitializeEditingControl(int rowIndex, object > > initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) > > { > > // Set the value of the editing control to the current cell value. > > base.InitializeEditingControl(rowIndex, initialFormattedValue, > > dataGridViewCellStyle); > > CheckedListBoxEditingControl ctl = > > DataGridView.EditingControl as CheckedListBoxEditingControl; > > InitializeCheckedListBox(ctl, (ICollection)this.FormattedValue); > > } > > private void InitializeCheckedListBox(CheckedListBox ctrl, ICollectionvalue) > > { > > ctrl.Items.Clear(); > > foreach (object obj in value) > > { > > ctrl.Items.Add(obj.ToString()); > > } > > ctrl.Tag = this.Value; > > } > > public override Type EditType > > { > > get > > { > > return typeof(CheckedListBoxEditingControl); > > } > } > > protected override object GetFormattedValue(object value, int rowIndex, ref > DataGridViewCellStyle cellStyle, > System.ComponentModel.TypeConvertervalueTypeConverter, > System.ComponentModel. > TypeConverter formattedValueTypeConverter, > DataGridViewDataErrorContextscontext) > > { > > if (value == null) > > { > > return new List<object>(); > > } > > return base.GetFormattedValue(value, rowIndex, ref cellStyle, > valueTypeConverter, formattedValueTypeConverter, context); > > } > > public override Type FormattedValueType > > { > > get > > { > > return typeof(ICollection); > > } > } > > public override Type ValueType > > { > > get > > { > > return typeof(ICollection); > > } > } > > public CheckedListBox internalControl; > > //private ComboBox lst = new ComboBox(); > > private CheckComboBoxTest.CheckedComboBox chkdrop = new CheckComboBoxTest. > CheckedComboBox(); > > protected override void Paint(System.Drawing.Graphics graphics, > System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, > int rowIndex, DataGridViewElementStates cellState, object value, > objectformattedValue, > string errorText, DataGridViewCellStyle cellStyle, > DataGridViewAdvancedBorderStyle advancedBorderStyle, > DataGridViewPaintPartspaintParts) > > { > > base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, > formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); > > graphics.FillRectangle(new SolidBrush(cellStyle.BackColor), cellBounds); > > if (internalControl == null) > > { > > internalControl = new CheckedListBox(); > > } > > internalControl.Items.Clear(); > > chkdrop.Items.Clear(); > > ICollection collection = value as ICollection; > > //if (collection != null) > > { > > //foreach (object obj in collection) > > { > > internalControl.Items.Add("obj",true ); > > internalControl.Items.Add("obj1"); > > chkdrop.Items.Add("hi",true); > > chkdrop.Items.Add("hi1",true); > > //chkdrop.DroppedDown = true; > > //lst.Items.Add("Hisdfsdf"); > > //lst.Items.Add("ghjgjhg"); > > } > > { > > } > > Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height); > > //internalControl.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, > bmp.Height)); > > chkdrop.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); > > //lst.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); > > graphics.DrawImage(bmp, cellBounds, new Rectangle(0, 0, bmp.Width, > bmp.Height), GraphicsUnit.Pixel); > > } > } > > protected override void OnClick(DataGridViewCellEventArgs e) > > { > > //base.DataGridView.BeginEdit(false); > > //base.OnClick(e); > > } > } > > class CheckedListBoxEditingControl : CheckedListBox, > IDataGridViewEditingControl > > { > > DataGridView dataGridView; > > private bool valueChanged = false; > > int rowIndex; > > public CheckedListBoxEditingControl() > > { > > } > > // Implements the IDataGridViewEditingControl.EditingControlFormattedValue > > // property. > > public object EditingControlFormattedValue > > { > > get > > { > > return this.Tag; > > } > > set > > { > > // this.Tag = value; > > } > } > > // Implements the > > // IDataGridViewEditingControl.GetEditingControlFormattedValue method. > > public object GetEditingControlFormattedValue( > > DataGridViewDataErrorContexts context) > > { > > return EditingControlFormattedValue; > > } > > // Implements the > > // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method. > > public void ApplyCellStyleToEditingControl( > > DataGridViewCellStyle dataGridViewCellStyle) > > { > > this.Font = dataGridViewCellStyle.Font; > > this.ForeColor = dataGridViewCellStyle.ForeColor; > > this.BackColor = dataGridViewCellStyle.BackColor; > > } > > // Implements the IDataGridViewEditingControl.EditingControlRowIndex > > // property. > > public int EditingControlRowIndex > > { > > get > > { > > return rowIndex; > > } > > set > > { > > rowIndex = value; > > } > } > > // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey > > // method. > > public bool EditingControlWantsInputKey( > > Keys key, bool dataGridViewWantsInputKey) > > { > > // Let the DateTimePicker handle the keys listed. > > switch (key & Keys.KeyCode) > > { > > case Keys.Left: > > case Keys.Up: > > case Keys.Down: > > case Keys.Right: > > case Keys.Home: > > case Keys.End: > > case Keys.PageDown: > > case Keys.PageUp: > > return true; > > default: > > return !dataGridViewWantsInputKey; > > } > } > > // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit > > // method. > > public void PrepareEditingControlForEdit(bool selectAll) > > { > > // No preparation needs to be done. > > } > > // Implements the IDataGridViewEditingControl > > // .RepositionEditingControlOnValueChange property. > > public bool RepositionEditingControlOnValueChange > > { > > get > > { > > return false; > > } > } > > // Implements the IDataGridViewEditingControl > > // .EditingControlDataGridView property. > > public DataGridView EditingControlDataGridView > > { > > get > > { > > return dataGridView; > > } > > set > > { > > dataGridView = value; > > } > } > > // Implements the IDataGridViewEditingControl > > // .EditingControlValueChanged property. > > public bool EditingControlValueChanged > > { > > get > > { > > return valueChanged; > > } > > set > > { > > valueChanged = value; > > } > } > > // Implements the IDataGridViewEditingControl > > // .EditingPanelCursor property. > > public Cursor EditingPanelCursor > > { > > get > > { > > return base.Cursor; > > } > } > } > } > > / *------------------------------------------------------ Code Ends > Here > ---------------------------------------------------------------------------------------------- > * / > > Thanks > > Regards > Aravindh.K
