0

DevExpress の使用は初めてです。複雑な DataGrid を設計してバインドする必要があります。

Designer を使用して設計しました。datagrid は Master-Detail タイプで、「MainGrid」およびその他の詳細グリッドが含まれています。それらの 1 つはタイプです: 'advBandedGridView'

MainGrid の設計は次のとおりです。

ここに画像の説明を入力

「advBandedGridView」の設計は次のとおりです。

ここに画像の説明を入力

ここで、Lists コレクションを使用して DataGrid を埋める必要があるため、次のコードを使用しました。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            ArrayList a = new ArrayList();
            Term_Space_Grid t = new Term_Space_Grid("x", "y", true, "z");
            t.expansions = new List<MyExpansions>();
            t.expansions.Add(new MyExpansions(0, "Aya", 0, 0, 0, 0, 0));
            a.Add(t);
            resultsGridControl.DataSource = a;


        }
    }

    public class Term_Space_Grid
    {
        public string x { get; set; }
        public string y { get; set; }
        public string g { get; set; }
        public bool z { get; set; }
        public List<MyExpansions> expansions { get; set; }

        public Term_Space_Grid(string x, string y, bool z, string g)
        {
            this.x = x;
            this.y = y;
            this.z = z;
            this.g = g;

        }
    }
    public class MyExpansions
    {
        public Morphos morphos { get; set; }
        public Semantics semantics { get; set; }  

        public MyExpansions(int morphoID, string morphoDerivation, int synID, int subID, int supID, int hasID, int insID)
        {
            this.morphos = new Morphos(morphoID, morphoDerivation);
            this.semantics = new Semantics(synID, subID, supID, hasID, insID);

        }

    }

    public class Morphos
    {
         //public List<Morph> morph{ get; set; }
        public Morph morph { get; set; }

         public Morphos(int morphoID, string morphoDerivation)
        {

            //this.morph = new List<Morph>();
            //this.morph.Add(new Morph(morphoID, morphoDerivation));
            this.morph = new Morph(morphoID, morphoDerivation);
         }
    }      

    public class Semantics
    {
        public List<Sem> synonyms { get; set; }
        public List<Sem> subClasses { get; set; }
        public List<Sem> superClasses { get; set; }
        public List<Sem> hasInstances { get; set; }
        public List<Sem> instanceOf { get; set; }

        public Semantics(int id1,int id2, int id3, int id4, int id5 )
        {
            this.synonyms = new List<Sem>();
            this.subClasses = new List<Sem>();
            this.superClasses = new List<Sem>();
            this.hasInstances = new List<Sem>();
            this.instanceOf = new List<Sem>();

            this.synonyms.Add(new Sem(id1));
            this.subClasses.Add(new Sem(id2));
            this.superClasses.Add(new Sem(id3));
            this.hasInstances.Add(new Sem(id4));
            this.instanceOf.Add(new Sem(id5));
        }
    }

     public class Morph
    {
         public int MorphoID { get; set; }
        public string MorphoDerivation { get; set; }

         public Morph(int morphoID, string morphoDerivation)
        {
            this.MorphoID = morphoID;
            this.MorphoDerivation = morphoDerivation;
         }
    }
    public class Sem
    {
        public int SemID { get; set; }
        //public string MorphoDerivation { get; set; }

        public Sem(int semID)
        {
            this.SemID = semID;

        }
    }
}

しかし、結果は、設計されたフォームを持たない新しい DataGrid として構築されていることがわかりました。Designer で定義した詳細タブが、結果のグリッドに表示されないということです。

結果は次のとおりです。

ここに画像の説明を入力

ノート

  1. 結果として得られるグリッドのデザインは、私のデザインとはまったく異なります。リスト オブジェクトのようなものだと思います。
  2. 私が渡した値ではなく、グリッドのセルに「WindowsFormsApplication2.Morphos」と「WindowsFormsApplication2.Semantics」が表示されるという他の問題!
4

1 に答える 1

1

まず、 GridColumn.FildNameプロパティを使用して、データ オブジェクト プロパティと GridView 列の間の関連付けを作成する必要があります。
メイン ビュー ( gridView2) の場合、次のようになります。

// gridColumn1
this.gridColumn1.Caption = "ID";
this.gridColumn1.FieldName = "x"; // associate this column with Term_Space_Grid.x property
this.gridColumn1.Name = "gridColumn1";

詳細については、次の記事をお読みください:列の作成とデータ フィールドへのバインド

次に、列をオブジェクトのネストされたプロパティ (たとえば、MyExpansions.semantics.subclasses.SemID) に直接バインドすることはできません。

この制限を回避するには、いくつかの方法を使用できます。

  1. 最も簡単な方法は、Unbound Columnsと対応するColumnView.CustomUnboundColumnDataイベントを使用することです (このイベントを処理して、ネストされたオブジェクトからデータを提供できます)。
  2. 次の KB 記事で説明されているアプローチを使用することもできます:グリッド列で複雑なデータ プロパティを表示および編集する方法

第三に、公式で保証された回答を得るには、DevExpress 製品に関する緊急の質問はDevExpress サポート センターに直接送信してください。

于 2013-01-28T15:22:39.400 に答える