0

との間のデータバインディングに少し問題がDataGridViewありPropertyGridます。

これが私がバインドしているオブジェクトからのコードとDataGridView

 public class Effort
 {
     public BindingList<EffortCalculationRelation> CalculationRelations { get; set; }
     public int ID { get; set; }
     // more properties

     public Effort()
     {
         CalculationRelations = new BindingList<EffortCalculationRelation>();
         CalculationRelations.Clear();

         for (int i=0;i<10;i++)
         {
             CalculationRelations.Add( new EffortCalculationRelation() { ID = i, Name = "Round:" + i.ToString(), calculation = "Some calc" });
         }
     }

     public Effort(int id) : this()
     {
         this.ID = id;
         // Load all other properties
     }

     public class EffortCalculationRelation
     {
         public int ID { get; set; }
         public string Name { get; set; }
         public string calculation { get; set; }


         public int Save()
         {
             // save or insert and return id or 0 on fail
             if (this.ID > 0)
             {
                 return this.Update();
             }
             else
             {
                 return this.Insert();
             }
         }
         public string Delete()
         {
             // delete and return "" or errormsg on fail
             return "";
         }
         private int Insert()
         {
             // insert and return id or 0 on fail
             return ID;
         }
         private int Update()
         {
             // return affected rows or 0 on fail
             return 1;
         }

         public string Representation
         {
             get { return String.Format("{0}: {1}", ID, Name); }
         }
     }
 }

datagridview接続は本当にシンプルで、ほんの少しのスタイルです。

  public test()
  {
     effort = new Effort(1209);
     dgv.DataSource = effort.CalculationRelations;
     dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
     dgv.AllowUserToAddRows = true;
     //this.dgv.AllowUserToDeleteRows = false;
     dgv.AllowUserToResizeRows = false;
     dgv.ReadOnly = true;
     dgv.SelectionChanged += (sender, args) =>
     {
         var selectedObjects =
              (from System.Windows.Forms.DataGridViewRow r in dgv.SelectedRows
              where r.DataBoundItem != null && r.DataBoundItem.GetType() == typeof(EffortCalculationRelation)
              select r.DataBoundItem).ToArray();

         // pg is a propertygrid
         this.pg.SelectedObjects = selectedObjects;
     };
  }

したがって、私の問題は、datagridviewで新しい行を選択すると、propertygridにプロパティが表示されないことです。

ロードした時点でリストにオブジェクトが含まれている行を選択すると、プロパティを編集できます。

それで、あなたは助けてくれませんか?

4

1 に答える 1