1

我正在尝试制作一个程序,该程序具有显示在每一行的数据网格、比萨饼的配料列表、比萨饼名称和比萨饼的价格。我可以让数据网格显示名称和价格,但我无法让它显示成分列表。数据网格的数据源是一个名为 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;
    }

具有基本的获取和设置属性。

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

    private BindingList<Pizza> pizzaList_;


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

现在我的问题是,当我单击它时,我正在尝试使用组合框列来显示比萨饼中的成分。但我似乎无法为成分创建绑定列,只有比萨名称和比萨价格。我错过了什么还是我试图做的事情是不可能的?

4

4 回答 4

0

您可以制作一个组合框并设置此事件,接下来,使用 Datagridview1.Row.Add 方法在 Datagridview 中插入一行。但在此之前,您应该有一个带有一些单元格的 DatagridviewRow,该行的自己的单元格是 DataGrifViewComboBoxCell。

祝你好运...

于 2013-01-26T01:30:15.470 回答
0

在表单加载事件上

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

FillCombo();

//创建一个方法来填充combo

private void FillCombo()
  {
    IngredientBindingSource.DataSource = ingredientList_;
  }
于 2013-01-26T01:33:23.240 回答
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,第三个是组合框。

于 2013-01-26T01:33:23.533 回答
0

你所做的一切看起来都是正确的。我认为的问题是在设计或运行时设置 DataGridView 的方式。

如果您前往这个答案,您可以看到您需要采取的步骤: 将数组的所有元素添加到 datagridview 行,除了一个

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

  • 记住将第一个组合框列设置DataMember为成分列表,您需要选择添加的成分数据绑定源控件(略低于表单设计的表面 - 在灰色区域中)

  • 第二个和第三个为 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 我上面提到的链接中有一个可下载的示例。

于 2013-01-26T01:42:46.780 回答