尝试将列表存储在数据网格中

时间:2013-01-26 01:13:08

标签: c#

我正在尝试制作一个程序,其中包含每行显示的数据网格,比萨饼的成分列表,比萨饼名称和比萨饼的价格。我可以让数据网格显示名称和价格,但我无法让它显示成分列表。数据网格的数据源是名为Pizza的类的绑定列表。

    class Pizza
{
    private List<Ingredients> ingredientList_;
    private string pizzaName_;
    private decimal retailPrice_;

    public Pizza(List<Ingredients> ingredientList, string pizzaName, decimal retailPrice)
    {
        ingredientList_ = ingredientList;
        pizzaName_ = pizzaName;
        retailPrice_ = retailPrice;
    }

它具有基本的get和set属性。 我也有一个成分类。

    class Ingredients
{
    private string name_;
    private int servingSize_;
    private int energyValue_;
    private decimal purchasePrice_;
    private bool isVegetarian_;

    public Ingredients(string name, int servingSize, int energyValue, decimal purchasePrice, bool isVegetarian)
    {
        name_ = name;
        servingSize_ = servingSize;
        energyValue_ = energyValue;
        purchasePrice_ = purchasePrice;
        isVegetarian_ = isVegetarian;
    }

具有基本的get和set属性。

在我的表单代码中,我有:

    private BindingList<Pizza> pizzaList_;


    pizzaList_ = new BindingList<Pizza>();
        dataGridViewPizzaMenu.DataSource = pizzaList_;

现在我的问题是,当我点击它时,我正在尝试使用组合框列来显示披萨中的成分。但我似乎无法为配料创建一个绑定列,只有披萨名称和披萨价格。我错过了什么或者我想做的不可能吗?

4 个答案:

答案 0 :(得分:0)

您可以创建一个comboBox,然后使用Datagridview1.Row.Add方法在Datagridview中插入一行来设置此事件。但在它之前,你应该有一个带有一些单元格的DatagridviewRow,这行的单元格是DataGrifViewComboBoxCell。

祝你好运......

答案 1 :(得分:0)

在表单加载事件

ingredientList_  = context.Ingredients.OrderBy(p => p.ingredientName).ToList();

FillCombo();

//创建一个填充组合的方法

private void FillCombo()
  {
    IngredientBindingSource.DataSource = ingredientList_;
  }

答案 2 :(得分:0)

为了将组合框放到第三个字段,你必须创建前两个作为datagridview项目:

  DataGridViewRow RowSample = new DataGridViewRow();
  DataGridViewComboBoxCell  pizzaItem = new DataGridViewComboBoxCell();
  pizzaItem.DataSource = pizzaList_;  
  pizzaItem.Value = pizzaList_[0];
  DataGridViewCell pizzaName = new DataGridViewTextBoxCell();
  pizzaName.Value = pizza.pizzaName; // creating the text cell
  DataGridViewCell pizzaPrice = new DataGridViewTextBoxCell();
  pizzaPrice.Value = pizza.pizzaPrice;; // creating the text cell
  RowSample.Cells.Add(pizzaName);
  RowSample.Cells.Add(pizzaPrice);
  RowSample.Cells.Add(pizzaItem); 
  SampleGridView.Rows.Add(RowSample);

现在RowSample添加了3个字段的datagridview,第三个是组合框。

答案 3 :(得分:0)

你所做的一切看似正确。我认为问题是在Design或Runtime上设置DataGridView的方式。

如果您转到此答案,您可以看到需要采取的步骤: Add all elements of array to datagridview rows except one

  • 绑定第一个组合框列的技巧是BindingSource。在设计时&gt;右键单击DataGridView&gt;选择编辑列&gt;选择第一列&gt;选择DataSource&gt;单击“添加项目数据源”&gt;选择对象&gt;然后勾选Ingredients类并单击Finish。

  • 记得将第一个ComboBox列DataMember设置为ingredientList,您需要选择添加的IngredientsDataBindingSource控件(略低于Form Design的表面 - 在灰色区域中)

    < / LI>
  • 第2和第3个为pizzaName和retailPrice添加两个TextBox列,并相应地设置DataPropertyName

 pizzaList_ = new BindingList<Pizza>();
 //Insert code to populate the List of Pizza's and Ingredients
 dataGridViewPizzaMenu.AutoGenerateColumns = false;
 dataGridViewPizzaMenu.DataSource = pizzaList_;
 ingredientsDataBindingSource.DataSource = pizzaList_.ingredientsList_;    

ps我在上面提到的链接中有一个可下载的样本。