【问题标题】:Trouble with DevExpress GridControl in Master-Detail mode主从模式下 DevExpress GridControl 的问题
【发布时间】:2018-07-16 04:59:33
【问题描述】:

我有一个 WinForms 应用程序,里面只有一个 DevExpress GridControl。 此 GridControl 在主从模式下使用两个 GridView 和一个关系。

作为 gridControl 的数据源,我正在使用以下类:

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 gridColumn1 并在那里添加 detailView.Columns.Add(gridColumn1),它将被忽略。
我能做的只有一件事是使用 [DisplayAttribute] 来更改 DisplayName、Visible 等。

问题:我必须如何更改我的代码才能更改我的 detailView。
例如,我可以在所有自动生成的列之后在 detailView 中添加 Column,或者将 Column 类型更改为 ComboBox(使用 RepositoryItemComboBox)。

【问题讨论】:

    标签: c# winforms devexpress master-detail


    【解决方案1】:

    您可以在GridView.MasterRowExpanded 事件处理程序中自定义详细视图。当扩展主行并创建和配置相应的详细视图时引发此事件。要访问此视图,请使用 GridView.GetDetailView 方法。或者,您可以处理GridControl.ViewRegistered 事件。

    另一种解决方案是创建pattern detail view 并在运行时或设计时对其进行自定义。

    【讨论】:

    • 谢谢,这个活动有很大帮助。斯帕西博 =)
    【解决方案2】:

    我建议您阅读 Working with Master-Detail Relationships in CodeMaster-Detail Relationships 的文档。

    您可以根据数据库结构创建视图,也可以通过添加视图和列及其设置来实用地创建视图。

    您可以在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.
    

    【讨论】:

    • 感谢您的回答!我的解决方案中的关系被破坏了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多