2013-05-10 61 views
0

我有一个GridView,我有一列DataGridViewTextBoxColumn。 但是,当我给你我的数据源到网格我得到这个错误:DataGridViewComboBox和Gridview

的DataGridView默认错误对话框

发生在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; } 
    } 

这个类是网格的数据源

Category类似于:

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

下拉(组合框)在网格中有分类数据源的数据源..

这是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类? (所以应该有一个List CategoryItem {get; set;})。 – user1035498 2013-05-10 13:13:48

+0

是的,但我会称之为CategoryItems。一个ComboBox需要绑定到一个集合。 – Paparazzi 2013-05-10 13:23:06