This is a migrated thread and some comments may be shown as answers.

GridViewComboBoxColumn Displays Empty Cell For Newly Added Values

4 Answers 151 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Joel
Top achievements
Rank 1
Joel asked on 04 Jun 2013, 02:49 PM
I'm a bit new to the RadControls, and C# in general, so bear with me if the trouble I am facing is due to some terribad implementation. Anyway, here is the problem.

I have a single, form that has a number of radGridViews on it. Most of the grids are very simple lists with a schema that consists of not much more than an 'ID'{int} and a 'Name'{string}. I also have one master grid with a number of GridViewComboBoxColums that reference the aforementioned lists. I'm using entity framework models for the datasources, which I assign using the below

VendorManagerEntities context = new VendorManagerEntities();
 
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
 
    contactBindingSource.DataSource = context.Contacts;
    statusBindingSource.DataSource = context.Status;
    priorityBindingSource.DataSource = context.Priorities;
    categoryBindingSource.DataSource = context.Categories;
}
Note: The RadGridViews and GridViewComboBoxColums are sharing the same DataSources, a.k.a. I have a grid for status's and a combo box on another grid that both use the statusBindingSource.

When I start the application it populates the grids, columns, and combo boxes from the database; no problem is had. If I then add a row, new value, to one of the Grids that value will show up in the corresponding combobox, but if I select the new value, which apears correctly in the drop down list, the cell will be blank. The correct value is selected, and it submits correctly to the database/model, but it does not display. I suspect that is has something to do with the DisplayMember, but I'm not sure. If I restart the program, and the form is recreated, the new values that were gotten from the database display correctly. What I would like is for the new values to display in their cells, without having to close and restart the form application.

I warn that most of the grid creation was done with the designer, so I am hesitant to post too much of that generated code, but I'll try and get the important bits in here

private void InitializeComponent()
{
this.radGrid_Contacts = new Telerik.WinControls.UI.RadGridView();  // Contacts is "supergrid" that has a ton of combo boxes
this.contactBindingSource = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.buyerBindingSource)).BeginInit();
 
this.radGrid_Statuses = new Telerik.WinControls.UI.RadGridView(); // Status is a simple list, every status wants to some day be part of a combobox
this.statusBindingSource = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.statusBindingSource)).BeginInit();
 
// ...
 
//
// Contact Rad Grid
//
this.radGrid_Contacts.MasterTemplate.AutoGenerateColumns = false;
this.radGrid_Contacts.MasterTemplate.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
gridViewDecimalColumn1.DataType = typeof(int);
gridViewDecimalColumn1.EnableExpressionEditor = false;
gridViewDecimalColumn1.FieldName = "ID";
gridViewDecimalColumn1.HeaderText = "ID";
gridViewDecimalColumn1.IsAutoGenerated = true;
gridViewDecimalColumn1.Name = "ID";
gridViewDecimalColumn1.ReadOnly = true;
 
gridViewComboBoxColumn4.DataSource = this.statusBindingSource;
gridViewComboBoxColumn4.DataType = typeof(int);
gridViewComboBoxColumn4.DisplayMember = "Name";
gridViewComboBoxColumn4.EnableExpressionEditor = false;
gridViewComboBoxColumn4.FieldName = "Status_ID";
gridViewComboBoxColumn4.HeaderText = "Status";
gridViewComboBoxColumn4.Name = "Status_ID";
gridViewComboBoxColumn4.ValueMember = "ID";
gridViewComboBoxColumn4.Width = 129;
 
this.radGrid_Contacts.MasterTemplate.Columns.AddRange(new Telerik.WinControls.UI.GridViewDataColumn[] {
gridViewDecimalColumn1,
gridViewComboBoxColumn4,
gridViewCommandColumn1});
this.radGrid_Contacts.MasterTemplate.DataSource = this.contactBindingSource;
this.radGrid_Contacts.MasterTemplate.DataSource = this.contactBindingSource;
 
this.contactBindingSource.DataSource = typeof(VendorManager.Contact);
 
//
// radGrid_Statuses
//
gridViewDecimalColumn6.DataType = typeof(int);
gridViewDecimalColumn6.EnableExpressionEditor = false;
gridViewDecimalColumn6.FieldName = "ID";
gridViewDecimalColumn6.HeaderText = "ID";
gridViewDecimalColumn6.IsAutoGenerated = true;
gridViewDecimalColumn6.IsVisible = false;
gridViewDecimalColumn6.Name = "ID";
gridViewDecimalColumn6.Width = 301;
gridViewTextBoxColumn23.EnableExpressionEditor = false;
gridViewTextBoxColumn23.FieldName = "Name";
gridViewTextBoxColumn23.HeaderText = "Status Name";
gridViewTextBoxColumn23.IsAutoGenerated = true;
gridViewTextBoxColumn23.Name = "Name";
gridViewTextBoxColumn23.Width = 909;
 
gridViewTextBoxColumn24.DataType = typeof(VendorManager.TrackableCollection<VendorManager.Contact>);
gridViewTextBoxColumn24.EnableExpressionEditor = false;
gridViewTextBoxColumn24.FieldName = "Contacts";
gridViewTextBoxColumn24.HeaderText = "Contacts";
gridViewTextBoxColumn24.IsAutoGenerated = true;
gridViewTextBoxColumn24.IsVisible = false;
gridViewTextBoxColumn24.Name = "Contacts";
gridViewTextBoxColumn24.Width = 151;
 
this.radGrid_Statuses.MasterTemplate.Columns.AddRange(new Telerik.WinControls.UI.GridViewDataColumn[] {
gridViewDecimalColumn6,
gridViewTextBoxColumn23,
gridViewTextBoxColumn24,
gridViewTextBoxColumn25});
this.radGrid_Statuses.MasterTemplate.DataSource = this.statusBindingSource;
this.radGrid_Statuses.Name = "radGrid_Statuses";
 
}


I hope I explained my problem thorougly, if not please tell me so that I can elaborate on anything important that I missed. Thank you in advance for the help.


-Joel


EDIT: Quite interstingly, if I right click and clear the value on the cell it displays correctly.

4 Answers, 1 is accepted

Sort by
0
Joel
Top achievements
Rank 1
answered on 05 Jun 2013, 01:57 PM
I see that I might have neglected to include the version information for the products and software I am using.

  • Windows 7
  • Telerik UI Controls, Windows Forms, Ver. 2013.1.321.40
  • .Net 4.0
  • Visual Studio 2010

Thanks again.


EDIT: So, I noticed that I only see this behavior if I save the data to the database with the context.SaveChanges() method. If I do not call that method, then I do not have a problem. However, I need to be able to save my changes.
0
Accepted
Ivan Petrov
Telerik team
answered on 06 Jun 2013, 03:53 PM
Hi Joel,

Thank you for writing.

When you add a new value to one of the grids it adds it to its underlying data source. At that point entity framework knows it has to add a new record in a table in the database. At the same time this record does not have a valid id (which usually is auto-incremented and is assigned by the SQL server). When you call the SaveChanges method of your context the record is pushed to the database and its Id is retrieved and store in it. This where the issue comes from, the combo box column of RadGridView stores its values in an internal keyed collection where the items values are used for keys. When the new id value is retrieved from the database the combobox internal collection has an invalid item because its value changed. I have logged this issue in our Public Issue Tracking System - PITS. You can track the progress of this issue, subscribe for status changes and add your vote comment on the following link - PITS Issue. To workaround the issue you can reset the combo box column data source after you call the SaveChanges method. To reset it set it to null and then to the data source.

I have also updated your Telerik Points for bringing this issue to our attention.

I hope this will be useful. Should you have further questions, I would be glad to help.

Regards,
Ivan Petrov
Telerik
RadChart for WinForms is obsolete. Now what?
0
Filippo
Top achievements
Rank 1
answered on 06 Jul 2015, 07:56 AM

Hello,

  I have the same problem. How can I track this link: http://www.telerik.com/support/pits.aspx#/public/winforms/15138 ?

  Thank you for your help,

    Filippo

0
Stefan
Telerik team
answered on 07 Jul 2015, 10:22 AM
Hello Filippo,

Our PITS system was migrated to a Feedback Portal. The issue page is here: http://feedback.telerik.com/Project/154/Feedback/Details/110451-fix-radgridview-combobox-column-the-combo-box-column-falls-in-an-invalid-sta

As you can see, it was resolved back in Q2 2013.

Should you continue experiencing issues, feel free to open a new case and we will investigate it.

Regards,
Stefan
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Tags
GridView
Asked by
Joel
Top achievements
Rank 1
Answers by
Joel
Top achievements
Rank 1
Ivan Petrov
Telerik team
Filippo
Top achievements
Rank 1
Stefan
Telerik team
Share this question
or