Visual Studio Designer looses / ignores data
        Posted  
        
            by Kempeth
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Kempeth
        
        
        
        Published on 2010-06-09T13:41:43Z
        Indexed on 
            2010/06/10
            8:52 UTC
        
        
        Read the original article
        Hit count: 441
        
I'm writing my own control - a datagridviewcolumn that displays integer values as texts like the comboboxcolumn can but without showing the combobox unless the cell is edited.
I'm mostly there but I have problems with the databinding. I managed to get the necessary properties to appear in the designer but every time I set the datasource and close the editor the changes are dropped.
When I assign the same datasource later in code it works like a charm, I just would prefer not having to do that...
public class DataGridViewLookupColumn : DataGridViewColumn
{
    private DataGridViewLookupCell template;
    private Object datasource = null;
    private String displaymember = String.Empty;
    private String valuemember = String.Empty;
    private BindingSource bindingsource = new BindingSource();
    public DataGridViewLookupColumn()
        : base()
    {
        this.template = new DataGridViewLookupCell();
    }
    public override DataGridViewCell CellTemplate
    {
        get
        {
            return this.template;
        }
        set
        {
        }
    }
    [Category("Data")]
    [
        DefaultValue(null),
        RefreshProperties(RefreshProperties.Repaint),
        AttributeProvider(typeof(IListSource)),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
    ]
    public object DataSource
    {
        get
        {
            return this.bindingsource.DataSource;
            //return this.datasource;
        }
        set
        {
            this.bindingsource.DataSource = value;
            this.bindingsource.EndEdit();
        }
    }
    [Category("Data")]
    [
        DefaultValue(""),
        TypeConverterAttribute("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design"),
        Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design", typeof(System.Drawing.Design.UITypeEditor)),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
    ]
    public String DisplayMember
    {
        get
        {
            return this.displaymember;
        }
        set
        {
            this.displaymember = value;
        }
    }
    [Category("Data")]
    [
        DefaultValue(""),
        TypeConverterAttribute("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design"),
        Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design", typeof(System.Drawing.Design.UITypeEditor)),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
    ]
    public String ValueMember
    {
        get
        {
            return this.valuemember;
        }
        set
        {
            this.valuemember = value;
        }
    }
}
EDIT: I experimenting I just found out that that original DataGridViewComboBoxColumn can be made to behave exactly like I wanted to. By setting the DisplayStyle to Nothing the combobox control is only shown in edit mode.
© Stack Overflow or respective owner