与IList的主细节网格

时间:2013-05-22 16:47:16

标签: c# winforms gridview devexpress gridcontrol

我有一个IList,我将其作为参数传递给Dev Express 10.2 GridControl数据源。每个“Foo”可能有一个IList或没有。我应该怎么做,制作一个Master-Detail网格,其中Foos是主行,并且对于包含Bars列表的每个Foo,显示一个“加号”按钮,用于显示“Bar”子表?

我正在使用nHibernate,因此,我无法使用数据表/数据集来完成这项工作(我们可以在DevExpress在线文档中看到)

我意识到GridControl有一个名为EnableMasterViewMode的布尔属性,但是我无法使这个东西工作。我做错了什么?

我在这里使用WinForms。

提前谢谢。

1 个答案:

答案 0 :(得分:4)

浏览Master-Detail Overview并查看Data Sources部分,了解提供数据源的具体方法。如果要实现主详细信息,则必须使用IRelationList接口或Master-Detail: Using Events

定义对象的关系

检查根据Pattern and Clone Views

中的Master-Detail Relationships部分创建的示例
public partial class MasterDetails : Form
    {
        GridControl grid;
        GridView view;
        GridView detailView;
        GridLevelNode detailNode;        
        public MasterDetails()
        {
            InitializeComponent();            
            InitializeGrid();
            InitializeAndAddColumnsToViews();
            InitializeAndBindDataSource();
        }

        private void InitializeGrid()
        {
            grid = new GridControl();
            view = new GridView(grid);
            detailView = new GridView(grid);
            detailNode = grid.LevelTree.Nodes.Add("SuppliersProducts", detailView);
            grid.Dock = DockStyle.Fill;
            this.Controls.Add(grid);
        }
        private void InitializeAndAddColumnsToViews()
        {
            if (view != null && detailView != null)
            {
                view.Columns.AddField("CategoryID").VisibleIndex = 0;              

                detailView.Columns.AddField("ID").VisibleIndex = 0;
                detailView.Columns.AddField("Name").VisibleIndex = 1;
                detailView.Columns.AddField("Category").VisibleIndex = 2;
            }
        }

        private void InitializeAndBindDataSource()
        {
            List<BookDetail> bookDetails = new List<BookDetail>();

            BookDetail bookDetail = null;
            for (int j = 0; j < 5; j++)
            {
                bookDetail = new BookDetail { CategoryID = j + 1 };
                for (int i = 0; i < 5; i++)
                {
                    bookDetail.Books.Add(new Book
                    {
                        ID = 1,
                        Name = "Book - " + (i + 1),
                        Category = j + 1
                    });
                }
                bookDetails.Add(bookDetail); 
            }
            grid.DataSource = bookDetails;
        }
    }

使用的类:

public class Category
{      
    public int ID { get; set; }
    public string Name { get; set; }

}
public class BookDetail
{
    private List<Book> books = new List<Book>();
    public int CategoryID { get; set; }        
    public List<Book> Books
    {
        get
        {
            return books;
        }
        set
        {
            books = value;
        }
    }
}
public class Book
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Category { get; set; }
}
  

其中Foos是主行,并且对于包含条形列表的每个Foo,显示“加号”按钮以显示“条形”子表格?

如果没有成功,尝试按上述方法实施,然后按照Master - Detail Section的数据规范部分进行操作。

如果你想在详细信息展开按钮时获取条形图,那么点击Master-Detail: Using Events它几乎是自定义方式来实现你拥有的任何数据对象。