winforms DevExpress GridControl在主-详细模式下出现问题

wribegjk  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(236)

我有一个WinForms应用程序,里面只有一个DevExpress GridControl。这个GridControl在主-详细模式下使用两个GridView和一个关系。
作为gridControl的dataSource,我使用以下类:

public class DashboardParameter
{
    public string Name { get; set; }
    public int DataType { get; set; }
    public int ValueType { get; set; }

    public BindingList<DashboardParameterValue> Detail { get; set; }

    public DashboardParameter()
    {
        Detail = new BindingList<DashboardParameterValue>();
    }
}

public class DashboardParameterValue
{
    public string Value { get; set; }
}

下面是数据加载的代码:

private void MasterDetail_Load(object sender, EventArgs e)
{
    data = new BindingList<DashboardParameter>();
    var p1 = new DashboardParameter() { Name = "First", DataType = 1, ValueType = 1};
    p1.Detail.Add(new DashboardParameterValue() { Value = "Value1" });
    p1.Detail.Add(new DashboardParameterValue() { Value = "Value2" });
    var p2 = new DashboardParameter() { Name = "Second", DataType = 1, ValueType = 1 };
    p2.Detail.Add(new DashboardParameterValue() { Value = "Value3" });
    p2.Detail.Add(new DashboardParameterValue() { Value = "Value4" });
    data.Add(p1);
    data.Add(p2);

    gridControl.DataSource = data;
}

据我所知,通过这种方式,我的gridControl自动查找主从关系,并为DataSource类中的每个字段创建列(如果AutoPopulateColumns属性为true)。

**问题:**无法更改detailView列中的任何内容。我不知道创建dataView列的时间。所有detailView属性都被忽略。

例如,如果我更改detailView.AutoPopulateColumn = false,则仍会创建列。如果我创建自定义GridColumn gridColumn 1并在其中添加detailView.Columns.Add(gridColumn 1),则它将被忽略。
我唯一能做的就是使用[DisplayAttribute]更改DisplayName、Visible等。

**问题:**必须如何更改代码才能更改detailView。

例如,我可以在detailView中所有自动生成的列之后添加Column,或者将Column类型更改为ComboBox(使用RepositoryItemComboBox)。

yqkkidmi

yqkkidmi1#

您可以在GridView.MasterRowExpanded事件处理程序中自定义详细资料视图。当展开主体行并创建和配置相应的详细资料视图时,将引发此事件。要访问此视图,请使用GridView.GetDetailView方法。或者,您可以处理GridControl.ViewRegistered事件。
另一个解决方案是创建模式细节视图,并在运行时或设计时定制它。

bbmckpt7

bbmckpt72#

我建议您仔细阅读Working with Master-Detail Relationships in Code和主-细节关系的文档。
可以基于数据库结构创建视图,也可以通过添加视图和列及其设置来实际创建视图。
您可以在GridView.MasterRowExpanded事件处理程序中自定义详细信息视图。在特定detail clone变为可见后立即激发。展开主行或在详细信息之间切换时激发MasterRowExpanded事件。
示例:

//Assign a CardView to the relationship 
            CardView cardView1 = new CardView(gridControl1);
            gridControl1.LevelTree.Nodes.Add("CategoriesProducts", cardView1);
            //Specify text to be displayed within detail tabs. 
            cardView1.ViewCaption = "Category Products";

            //Hide the CategoryID column for the master View 
            gridView1.Columns["CategoryID"].VisibleIndex = -1;

            //Present data in the Picture column as Images 
            RepositoryItemPictureEdit riPictureEdit = gridControl1.RepositoryItems.Add("PictureEdit") as RepositoryItemPictureEdit;
            gridView1.Columns["Picture"].ColumnEdit = riPictureEdit;
            //Stretch images within cells.

相关问题