2013-05-10 5 views
0

У меня есть GridView, и у меня есть один столбец DataGridViewTextBoxColumn. Но когда я задаю свой DataSource к сетке я получаю эту ошибку:DataGridViewComboBox и Gridview

DataGridView По умолчанию Error Dialog

следующее исключение произошло в DataGridView:

System.FormatException: DataGridViewComboBoxCell value is not valid. 

Для замены диалога это по умолчанию, пожалуйста, обрабатывать событие DataError.

OK

Я не понимаю, почему это ..

Это мой первый класс:

public class FloraItem 
    { 
     public Guid Id { get; set; } 
     public string Name { get; set; } 
     public int Price { get; set; } 
     public DateTime ExpirationDate { get; set; } 
     public Category CategoryItem { get; set; } 
    } 

Этот класс является DataSource сетки

Класс категории выглядит следующим образом:

public class Category 
    { 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public bool AddBreaksToPrint { get; set; } 
    } 

источник данные из выпадающего списка (поля со списком) в сетке имеет категорию Datasource ..

Это функция InitializeComponent

private void InitializeComponent() 
    { 
     this.components = new System.ComponentModel.Container(); 
     this.grdFloraItems = new System.Windows.Forms.DataGridView(); 
     this.floraItemBindingSource = new System.Windows.Forms.BindingSource(this.components); 
     this.categoryBindingSource2 = new System.Windows.Forms.BindingSource(this.components); 
     this.lstCategories = new System.Windows.Forms.ComboBox(); 
     this.label1 = new System.Windows.Forms.Label(); 
     this.nameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 
     this.priceDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 
     this.expirationDateDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 
     this.CategoryItem = new System.Windows.Forms.DataGridViewComboBoxColumn(); 
     ((System.ComponentModel.ISupportInitialize)(this.grdFloraItems)).BeginInit(); 
     ((System.ComponentModel.ISupportInitialize)(this.floraItemBindingSource)).BeginInit(); 
     ((System.ComponentModel.ISupportInitialize)(this.categoryBindingSource2)).BeginInit(); 
     this.SuspendLayout(); 
     // 
     // grdFloraItems 
     // 
     this.grdFloraItems.AllowUserToDeleteRows = false; 
     this.grdFloraItems.AutoGenerateColumns = false; 
     this.grdFloraItems.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 
     this.grdFloraItems.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 
     this.nameDataGridViewTextBoxColumn, 
     this.priceDataGridViewTextBoxColumn, 
     this.expirationDateDataGridViewTextBoxColumn, 
     this.CategoryItem}); 
     this.grdFloraItems.DataSource = this.floraItemBindingSource; 
     this.grdFloraItems.Location = new System.Drawing.Point(12, 55); 
     this.grdFloraItems.Name = "grdFloraItems"; 
     this.grdFloraItems.ReadOnly = true; 
     this.grdFloraItems.Size = new System.Drawing.Size(652, 206); 
     this.grdFloraItems.TabIndex = 1; 
     // 
     // floraItemBindingSource 
     // 
     this.floraItemBindingSource.DataSource = typeof(Data.FloraItem); 
     // 
     // categoryBindingSource2 
     // 
     this.categoryBindingSource2.DataSource = typeof(Data.Category); 
     // 
     // nameDataGridViewTextBoxColumn 
     // 
     this.nameDataGridViewTextBoxColumn.DataPropertyName = "Name"; 
     this.nameDataGridViewTextBoxColumn.HeaderText = "Artikel"; 
     this.nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn"; 
     this.nameDataGridViewTextBoxColumn.ReadOnly = true; 
     this.nameDataGridViewTextBoxColumn.Width = 250; 
     // 
     // priceDataGridViewTextBoxColumn 
     // 
     this.priceDataGridViewTextBoxColumn.DataPropertyName = "Price"; 
     this.priceDataGridViewTextBoxColumn.HeaderText = "Prijs"; 
     this.priceDataGridViewTextBoxColumn.Name = "priceDataGridViewTextBoxColumn"; 
     this.priceDataGridViewTextBoxColumn.ReadOnly = true; 
     // 
     // expirationDateDataGridViewTextBoxColumn 
     // 
     this.expirationDateDataGridViewTextBoxColumn.DataPropertyName = "ExpirationDate"; 
     this.expirationDateDataGridViewTextBoxColumn.HeaderText = "Verloop datum"; 
     this.expirationDateDataGridViewTextBoxColumn.Name = "expirationDateDataGridViewTextBoxColumn"; 
     this.expirationDateDataGridViewTextBoxColumn.ReadOnly = true; 
     this.expirationDateDataGridViewTextBoxColumn.Width = 150; 
     // 
     // CategoryItem 
     // 
     this.CategoryItem.DataPropertyName = "CategoryItem"; 
     this.CategoryItem.DataSource = this.categoryBindingSource2; 
     this.CategoryItem.DisplayMember = "Name"; 
     this.CategoryItem.HeaderText = "Categorie"; 
     this.CategoryItem.Name = "CategoryItem"; 
     this.CategoryItem.ReadOnly = true; 
     this.CategoryItem.Resizable = System.Windows.Forms.DataGridViewTriState.True; 
     this.CategoryItem.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; 
     this.CategoryItem.ValueMember = "Id"; 
     // 
     // EditFloraItem 
     // 
     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
     this.ClientSize = new System.Drawing.Size(696, 273); 
     this.Controls.Add(this.label1); 
     this.Controls.Add(this.lstCategories); 
     this.Controls.Add(this.grdFloraItems); 
     this.Name = "EditFloraItem"; 
     this.Text = "EditFloraItem"; 
     this.Controls.SetChildIndex(this.grdFloraItems, 0); 
     this.Controls.SetChildIndex(this.lstCategories, 0); 
     this.Controls.SetChildIndex(this.label1, 0); 
     ((System.ComponentModel.ISupportInitialize)(this.grdFloraItems)).EndInit(); 
     ((System.ComponentModel.ISupportInitialize)(this.floraItemBindingSource)).EndInit(); 
     ((System.ComponentModel.ISupportInitialize)(this.categoryBindingSource2)).EndInit(); 
     ((System.ComponentModel.ISupportInitialize)(this.categoryBindingSource1)).EndInit(); 
     ((System.ComponentModel.ISupportInitialize)(this.categoryBindingSource)).EndInit(); 
     this.ResumeLayout(false); 
     this.PerformLayout(); 

     } 

Это где я застрял ..

ответ

0

Категория должна быть коллекцией (например, списком), а не одним элементом.
И вы, вероятно, называете это категориями.

+0

Вы имеете в виду класс FloraItem? (так что у вас должен быть список CategoryItem {get; set;}). – user1035498

+0

Да, но я бы назвал его CategoryItems. ComboBox необходимо связать с коллекцией. – Paparazzi

Смежные вопросы