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 プロパティがあります。Ingredient クラスもあります。

    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

4 に答える 4

0

次に、Datagridview1.Row.Addメソッドを使用して、comboBoxを作成し、このイベントを設定して、Datagridviewに行を挿入できます。ただし、その前に、いくつかのセルを含むDatagridviewRowが必要です。この行のセルは、DataGrifViewComboBoxCellです。

幸運を...

于 2013-01-26T01:30:15.470 に答える
0

フォーム読み込みイベントで

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

FillCombo();

//コンボを埋めるメソッドを作成

private void FillCombo()
  {
    IngredientBindingSource.DataSource = ingredientList_;
  }
于 2013-01-26T01:33:23.240 に答える
0

コンボ ボックスを 3 番目のフィールドに配置するには、最初の 2 つを 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 つ目はコンボボックスです。

于 2013-01-26T01:33:23.533 に答える
0

あなたが行ったことはすべて正しいように見えます。私が思う問題は、DataGridView がデザインまたはランタイムにセットアップされる方法です。

この回答に進むと、実行する必要がある手順を確認できます。 配列のすべての要素を datagridview 行に追加します。

  • 最初のコンボボックス列をバインドするトリックは BindingSource です。設計時に > DataGridView を右クリック > [列の編集] を選択 > 最初の列を選択 > [DataSource] を選択 > [プロジェクト DataSource の追加] をクリック > [オブジェクト] を選択 >Ingredientsクラスにチェックマークを付けて [完了] をクリックします。

  • 1 番目の ComboBox 列DataMemberを成分リストに設定することを忘れないでください。追加された IngredientsDataBindingSource コントロールを選択する必要があります (フォーム デザインの表面の少し下 - 灰色の領域)。

  • 2 番目と 3 番目は、pizzaName と RetailPrice の 2 つの 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 に答える