Change the DataGridView Column in the run time

Discussion in 'Microsoft Dot NET Framework' started by anbaesivam, Jan 5, 2009.

  1. anbaesivam

    anbaesivam Guest

    In my requiement, I need to change the type of the DataGridView Column from
    one type of another type on a particular event. For example, when a button
    click occurs change the column type from DataGridViewTextBoxColumn to
    DataGridViewComboBoxColumn and vice versa. Also at the same time the column
    values needs to be preserved.

    Thanks in advance.
     
    anbaesivam, Jan 5, 2009
    #1
    1. Advertisements

  2. anbaesivam schrieb:
    > In my requiement, I need to change the type of the DataGridView Column from
    > one type of another type on a particular event. For example, when a button
    > click occurs change the column type from DataGridViewTextBoxColumn to
    > DataGridViewComboBoxColumn and vice versa. Also at the same time the column
    > values needs to be preserved.
    >
    > Thanks in advance.


    Hi,

    you can assign a new DataGridViewCell instance to any cell in the
    dataGridView like i.e. dataGridView1.Rows[0].Cells[1] = new
    DataGridViewTextBoxCell. But i cannot say from my head how / if
    you can preserve the value if you use databinding.

    Another option would be to add two columns to the datagridview,
    which are both bound to the same DataMember and then set only one of
    them to visible. So you can simulate the desired behaviour.

    Philipp
     
    Philipp Brune, Jan 5, 2009
    #2
    1. Advertisements

  3. Hi anbaesivam,

    Thank you for using Microsoft Managed Newsgroup Service, my name is Zhi-Xin
    Ye, it's my pleasure to work with you on this issue.

    As I understand, you want to change the DataGridView column type
    dynamically. The
    DataGridViewTextBoxColumn/DataGridViewComboBoxColumn/DataGridViewCheckBoxCol
    umn/etc. are all derived from the DataGridViewColumn class, they're of the
    same level and cannot cast to each other. However, for the specified
    scenario you described, i.e. change the column type from
    DataGridViewTextBoxColumn to DataGridViewComboBoxColumn and vice versa,
    there's a small trick, you can use a DataGridViewComboBoxColumn and change
    its DisplayStyle property value between
    DataGridViewComboBoxDisplayStyle.Nothing and
    DataGridViewComboBoxDisplayStyle.DropDownButton. For example:

    private void button1_Click(object sender, EventArgs e)
    {
    DataGridViewComboBoxColumn c =
    (DataGridViewComboBoxColumn)this.dataGridView1.Columns[0];

    //Make the column displayed as ComboBox column.
    c.DisplayStyle =
    DataGridViewComboBoxDisplayStyle.DropDownButton;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    //....other code here...

    DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn();
    c.DataPropertyName = "c1";
    c.DataSource = dt;
    c.DisplayMember = "c2";
    c.ValueMember = "c1";

    //Make the column displayed as textbox column.
    c.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;

    this.dataGridView1.Columns.Add(c);
    }

    For other kinds of column types, you can try Philipp's suggestion to make
    different type columns bound to the same filed, and show/hide them based on
    your needs.

    If anything is unclear or you have any concerns, please feel free to let me
    know, I will be happy of assistance. Have a good day!

    Best Regards,
    Zhi-Xin Ye
    Microsoft Managed Newsgroup Support Team

    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    ==================================================
    Get notification to my posts through email? Please refer to
    http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

    Note: MSDN Managed Newsgroup support offering is for non-urgent issues
    where an initial response from the community or a Microsoft Support
    Engineer within 2 business day is acceptable. Please note that each follow
    up response may take approximately 2 business days as the support
    professional working with you may need further investigation to reach the
    most efficient resolution. The offering is not appropriate for situations
    that require urgent, real-time or phone-based interactions. Issues of this
    nature are best handled working with a dedicated Microsoft Support Engineer
    by contacting Microsoft Customer Support Services (CSS) at
    http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
    ==================================================
    This posting is provided "AS IS" with no warranties, and confers no rights.
     
    Zhi-Xin Ye [MSFT], Jan 6, 2009
    #3
  4. anbaesivam

    anbaesivam Guest

    Thanks a lot for your solution. The solution exactly matches my requirement.



    "Zhi-Xin Ye [MSFT]" wrote:

    > Hi anbaesivam,
    >
    > Thank you for using Microsoft Managed Newsgroup Service, my name is Zhi-Xin
    > Ye, it's my pleasure to work with you on this issue.
    >
    > As I understand, you want to change the DataGridView column type
    > dynamically. The
    > DataGridViewTextBoxColumn/DataGridViewComboBoxColumn/DataGridViewCheckBoxCol
    > umn/etc. are all derived from the DataGridViewColumn class, they're of the
    > same level and cannot cast to each other. However, for the specified
    > scenario you described, i.e. change the column type from
    > DataGridViewTextBoxColumn to DataGridViewComboBoxColumn and vice versa,
    > there's a small trick, you can use a DataGridViewComboBoxColumn and change
    > its DisplayStyle property value between
    > DataGridViewComboBoxDisplayStyle.Nothing and
    > DataGridViewComboBoxDisplayStyle.DropDownButton. For example:
    >
    > private void button1_Click(object sender, EventArgs e)
    > {
    > DataGridViewComboBoxColumn c =
    > (DataGridViewComboBoxColumn)this.dataGridView1.Columns[0];
    >
    > //Make the column displayed as ComboBox column.
    > c.DisplayStyle =
    > DataGridViewComboBoxDisplayStyle.DropDownButton;
    > }
    >
    > private void Form1_Load(object sender, EventArgs e)
    > {
    > //....other code here...
    >
    > DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn();
    > c.DataPropertyName = "c1";
    > c.DataSource = dt;
    > c.DisplayMember = "c2";
    > c.ValueMember = "c1";
    >
    > //Make the column displayed as textbox column.
    > c.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
    >
    > this.dataGridView1.Columns.Add(c);
    > }
    >
    > For other kinds of column types, you can try Philipp's suggestion to make
    > different type columns bound to the same filed, and show/hide them based on
    > your needs.
    >
    > If anything is unclear or you have any concerns, please feel free to let me
    > know, I will be happy of assistance. Have a good day!
    >
    > Best Regards,
    > Zhi-Xin Ye
    > Microsoft Managed Newsgroup Support Team
    >
    > Delighting our customers is our #1 priority. We welcome your comments and
    > suggestions about how we can improve the support we provide to you. Please
    > feel free to let my manager know what you think of the level of service
    > provided. You can send feedback directly to my manager at:
    > .
    >
    > ==================================================
    > Get notification to my posts through email? Please refer to
    > http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.
    >
    > Note: MSDN Managed Newsgroup support offering is for non-urgent issues
    > where an initial response from the community or a Microsoft Support
    > Engineer within 2 business day is acceptable. Please note that each follow
    > up response may take approximately 2 business days as the support
    > professional working with you may need further investigation to reach the
    > most efficient resolution. The offering is not appropriate for situations
    > that require urgent, real-time or phone-based interactions. Issues of this
    > nature are best handled working with a dedicated Microsoft Support Engineer
    > by contacting Microsoft Customer Support Services (CSS) at
    > http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
    > ==================================================
    > This posting is provided "AS IS" with no warranties, and confers no rights.
    >
    >
     
    anbaesivam, Jan 6, 2009
    #4
  5. anbaesivam

    anbaesivam Guest

    After chaning the display style to
    "DataGridViewComboBoxDisplayStyle.Nothing", when I
    try to enter value from keyboard, the combo-box appears and when I leave the
    combo-box disappears. Is it possible to fix this issue?.

    Thanks.

    "Zhi-Xin Ye [MSFT]" wrote:

    > Hi anbaesivam,
    >
    > Thank you for using Microsoft Managed Newsgroup Service, my name is Zhi-Xin
    > Ye, it's my pleasure to work with you on this issue.
    >
    > As I understand, you want to change the DataGridView column type
    > dynamically. The
    > DataGridViewTextBoxColumn/DataGridViewComboBoxColumn/DataGridViewCheckBoxCol
    > umn/etc. are all derived from the DataGridViewColumn class, they're of the
    > same level and cannot cast to each other. However, for the specified
    > scenario you described, i.e. change the column type from
    > DataGridViewTextBoxColumn to DataGridViewComboBoxColumn and vice versa,
    > there's a small trick, you can use a DataGridViewComboBoxColumn and change
    > its DisplayStyle property value between
    > DataGridViewComboBoxDisplayStyle.Nothing and
    > DataGridViewComboBoxDisplayStyle.DropDownButton. For example:
    >
    > private void button1_Click(object sender, EventArgs e)
    > {
    > DataGridViewComboBoxColumn c =
    > (DataGridViewComboBoxColumn)this.dataGridView1.Columns[0];
    >
    > //Make the column displayed as ComboBox column.
    > c.DisplayStyle =
    > DataGridViewComboBoxDisplayStyle.DropDownButton;
    > }
    >
    > private void Form1_Load(object sender, EventArgs e)
    > {
    > //....other code here...
    >
    > DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn();
    > c.DataPropertyName = "c1";
    > c.DataSource = dt;
    > c.DisplayMember = "c2";
    > c.ValueMember = "c1";
    >
    > //Make the column displayed as textbox column.
    > c.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
    >
    > this.dataGridView1.Columns.Add(c);
    > }
    >
    > For other kinds of column types, you can try Philipp's suggestion to make
    > different type columns bound to the same filed, and show/hide them based on
    > your needs.
    >
    > If anything is unclear or you have any concerns, please feel free to let me
    > know, I will be happy of assistance. Have a good day!
    >
    > Best Regards,
    > Zhi-Xin Ye
    > Microsoft Managed Newsgroup Support Team
    >
    > Delighting our customers is our #1 priority. We welcome your comments and
    > suggestions about how we can improve the support we provide to you. Please
    > feel free to let my manager know what you think of the level of service
    > provided. You can send feedback directly to my manager at:
    > .
    >
    > ==================================================
    > Get notification to my posts through email? Please refer to
    > http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.
    >
    > Note: MSDN Managed Newsgroup support offering is for non-urgent issues
    > where an initial response from the community or a Microsoft Support
    > Engineer within 2 business day is acceptable. Please note that each follow
    > up response may take approximately 2 business days as the support
    > professional working with you may need further investigation to reach the
    > most efficient resolution. The offering is not appropriate for situations
    > that require urgent, real-time or phone-based interactions. Issues of this
    > nature are best handled working with a dedicated Microsoft Support Engineer
    > by contacting Microsoft Customer Support Services (CSS) at
    > http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
    > ==================================================
    > This posting is provided "AS IS" with no warranties, and confers no rights.
    >
    >
     
    anbaesivam, Jan 6, 2009
    #5
  6. Hi anbaesivam,

    Thanks for the feedback.

    When the display style is set to DataGridViewComboBoxDisplayStyle.Nothing,
    the column itself is still of DataGridViewComboBoxColumn type, not of
    DataGridViewTextBoxColumn type, so its editing control is still a
    ComboBox, that's why you see the ComboBox appear when editing on the
    column.
    If you want to show a TextBox on the DataGridViewComboBoxColumn when
    editing, there're many ways to do this, for example, you can create a
    custom DataGridViewComboBoxColumn derive from the standard
    DataGridViewComboBoxColumn class and change its editing control to TextBox,
    but this way cost a lot of work.
    So to make things easy, you can use two columns, one is
    DataGridViewTextBoxColumn, the other is DataGridViewComboBoxColumn, show or
    hide them based on your requirement.

    If you have any questions or concerns, please feel free to let me know. I
    will be happy of assistance. Have a nice day!

    Best Regards,
    Zhi-Xin Ye
    Microsoft Managed Newsgroup Support Team

    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    This posting is provided "AS IS" with no warranties, and confers no rights.
     
    Zhi-Xin Ye [MSFT], Jan 7, 2009
    #6
  7. Hi anbaesivam,

    Does my last reply make sense to you? If you need further help, please feel
    free to let me know, I will be happy to be of assistance.

    Have a nice day!

    Best Regards,
    Zhi-Xin Ye
    Microsoft Managed Newsgroup Support Team

    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    This posting is provided "AS IS" with no warranties, and confers no rights.
     
    Zhi-Xin Ye [MSFT], Jan 9, 2009
    #7
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Guest

    DataGridView ComboBox Column

    Guest, Mar 29, 2005, in forum: Microsoft Dot NET Framework
    Replies:
    0
    Views:
    411
    Guest
    Mar 29, 2005
  2. Greg

    Implementing a DataGridView numeric only column

    Greg, May 26, 2006, in forum: Microsoft Dot NET Framework
    Replies:
    2
    Views:
    1,039
  3. Mike
    Replies:
    3
    Views:
    259
  4. Greg

    DataGridView Combobox column Error

    Greg, Jul 26, 2006, in forum: Microsoft Dot NET Framework
    Replies:
    2
    Views:
    2,459
  5. Chris Hayes
    Replies:
    1
    Views:
    846
    Chris Hayes
    Aug 27, 2006
Loading...

Share This Page