WinForm devexpress做主从表
感兴趣可以先看看 反正我觉得讲的不是人话…
网上其实很多例子 讲的比较好的 比如这个 代码清晰 逻辑不算复杂 DEV—【GridControl主从表】
但是目前有个需求 我的从表里面还有一个List 但是我不想要那个List显示出来 正常写法的话 他会自动帮我加载
网上也没找到 然后看基类发现一个属性 说人话就是你是不是只想显示自己设置的关系 不是的话 他自动给你加上去 默认false
//
// 摘要:
// Gets or sets whether the Grid Control displays only the relationships that exist
// in the DevExpress.XtraGrid.GridControl.LevelTree.
[Browsable(true)]
[DefaultValue(false)]
[DevExpressXtraGridLocalizedDescriptionAttribute("GridControlShowOnlyPredefinedDetails")]
[DXCategory("Behavior")]
public virtual bool ShowOnlyPredefinedDetails { get; set; }
所以完成需求 改这个属性就完事儿了
最后贴一段比较完整的代码
注意当前的代码是在GridControl的一个封装里面写的
this指向GridControl本身
//只显示已设置的关系 默认false
this.ShowOnlyPredefinedDetails = true;
//创建一个从表的GridView对象
var childView = new GridView();
childView.ViewCaption = "好看名字";//显示表格标题用的
childView.Name = "childView";
childView.GridControl = this;
//巴拉巴拉的一些设置 根据需求来
childView.OptionsBehavior.Editable = false;
childView.OptionsView.ShowGroupPanel = false;
childView.OptionsView.ColumnAutoWidth = false;
//构建GridLevelNode并添加到LevelTree集合里面
var node = new GridLevelNode();
node.LevelTemplate = this.ChildView;
node.RelationName = "关系名称";// 关系名称 如果是对象 就填对象名称 如 Items 是表 就填表关系字段
this.LevelTree.Nodes.AddRange(new GridLevelNode[] { node });
//添加对应的视图集合显示
this.ViewCollection.Add(this.ChildView);
//创建从表显示的列
childView.Columns.Clear();
List<string> ChildViewSortColumnList=new List<string>();// 要显示的列 字段名丢进去
Dictionary<string, int> ChildViewCustomWidthColumnList=new Dictionary<string, int>();// 要设置的列宽 字段名和宽度丢进去
GridColumn gridColumn;
int columnIndex = 0;
foreach (var item in ChildViewSortColumnList)
{
gridColumn = new GridColumn()
{
FieldName = item,
Caption = item,
VisibleIndex = columnIndex++
};
childView.Columns.Add(gridColumn);
}
ChildViewCustomWidthColumnList?.ForEach(x =>
{
var column = childView.Columns.ColumnByFieldName(x.Key);
if (column != null)
{
column.Width = x.Value;
}
});
// 最后绑定上数据源
this.DataSource = dataSource;