我有一个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 gridColumn1并添加detailView.Columns.Add(gridColumn1),它将被忽略。
我只能做一件事就是使用[DisplayAttribute]来改变DisplayName,Visible等等。
问题:我如何更改代码才能更改我的detailView 例如,我可以在所有自动生成的列之后在detailView中添加Column,或者将Column类型更改为ComboBox(使用RepositoryItemComboBox)。
答案 0 :(得分:0)
您可以在GridView.MasterRowExpanded事件处理程序中自定义详细信息视图。展开主行并创建和配置相应的详细信息视图时,将引发此事件。要访问此视图,请使用GridView.GetDetailView方法。或者,您可以处理GridControl.ViewRegistered事件。
另一个解决方案是创建pattern detail view并在运行时或设计时自定义它。
答案 1 :(得分:0)
我建议您浏览Working with Master-Detail Relationships in Code和Master-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.