Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net DataGridViewComboBox和Gridview_.net_Winforms_Datagridview - Fatal编程技术网

.net DataGridViewComboBox和Gridview

.net DataGridViewComboBox和Gridview,.net,winforms,datagridview,.net,Winforms,Datagridview,我有一个GridView和一列DataGridViewTextBoxColumn。 但是,当我将数据源分配给网格时,会出现以下错误: DataGridView默认错误对话框 DataGridView中发生以下异常: System.FormatException: DataGridViewComboBoxCell value is not valid. 要替换此默认对话框,请处理DataError事件 正常 我不明白为什么这是 这是我的第一节课: public class FloraIt

我有一个GridView和一列DataGridViewTextBoxColumn。 但是,当我将数据源分配给网格时,会出现以下错误:

DataGridView默认错误对话框

DataGridView中发生以下异常:

System.FormatException: DataGridViewComboBoxCell value is not valid.
要替换此默认对话框,请处理DataError事件

正常

我不明白为什么这是

这是我的第一节课:

    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; }
   }
网格中下拉列表(组合框)的数据源具有类别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();

      }

这就是我被困的地方

类别需要是一个集合(如列表),而不是单个项目。

你可能会称之为is类别。

你是说在FloraItem类中?(因此应该有一个列表CategoryItem{get;set;})。是的,但我称之为CategoryItems。组合框需要绑定到集合。