C# DevExpress XAF级联查找列表视图
我已经创建了DevExpress XAF Blazor应用程序。C# DevExpress XAF级联查找列表视图,c#,devexpress,xaf,xpo,C#,Devexpress,Xaf,Xpo,我已经创建了DevExpress XAF Blazor应用程序。 我有四张桌子(页) 第一个是类别,由一对多与指定的承包商类别表关联 -oid字符串 -标题字符串 private string\u Title; 公共字符串标题 { 获取{return\u Title;} set{SetPropertyValue(name of(Title),ref_Title,value);} } [DevExpress.Xpo.Association(“类别指定合同类别”)] 公共XPCollection A
我有四张桌子(页)
第一个是类别,由一对多与指定的承包商类别表关联
-oid字符串
-标题字符串
private string\u Title;
公共字符串标题
{
获取{return\u Title;}
set{SetPropertyValue(name of(Title),ref_Title,value);}
}
[DevExpress.Xpo.Association(“类别指定合同类别”)]
公共XPCollection AssignedContractor类别
{
得到
{
return GetCollection(name of(AssignedContractorCategory));
}
}
第二个是承包商,由一对多与指定的承包商类别表-oid字符串
-标题字符串
private string\u Title;
公共字符串标题
{
获取{return\u Title;}
set{SetPropertyValue(name of(Title),ref_Title,value);}
}
[DevExpress.Xpo.协会(“承包商指定的承包商类别”)]
公共XPCollection AssignedContractor类别
{
得到
{
return GetCollection(name of(AssignedContractorCategory));
}
}
第三个是指定的合同类别,由一对多与账单表格关联 -oid字符串
-类别字符串
-FK承包商字符串
private-Category\u-Category;
[协会(“类别指定合同或类别”)]
公共类别
{
获取{return\u Category;}
set{SetPropertyValue(name of(Category),ref_Category,value);}
}
私人承包商(u承包商),;
[协会(“承包商指定的承包商类别”)]
公共承包商
{
获取{return\u Contractor;}
设置{SetPropertyValue(承包商名称,参考承包商,值);}
}
第四个是比尔
-oid字符串-FKSassignedContractorCategory字符串
-双倍
private-Category\u-Category;
公共类别
{
获取{return\u Category;}
set{SetPropertyValue(name of(Category),ref_Category,value);}
}
私人承包商(u承包商),;
公共承包商
{
获取{return\u Contractor;}
设置{SetPropertyValue(承包商名称,参考承包商,值);}
}
私人双倍金额;
公共双倍金额
{
获取{return\u Amount;}
set{SetPropertyValue(nameof(Amount),ref_Amount,value);}
}
在账单页面上,我想显示:类别(查阅列表视图),在我选择一个类别后,它只显示与表AssignedContractor类别相关的承包商(查阅列表视图)
请注意,我是一名初学者。步骤1:在您的
账单
类中,用即时播客数据
属性装饰类别
-属性。它将确保在UI上的每次更改后立即调用setter:
[ImmediatePostData]
public Category Category
步骤2:在Bill
类上,将DataSourceProperty
-属性添加到Contractor
属性,然后实现相应的属性,该属性始终返回正确的Contractor选择。请注意,我用[Browsable(false)]
装饰了新的ContractorSelection
-属性,使其在XAF UI上完全不可见:
private Contractor _Contractor;
[DataSourceProperty(nameof(ContractorSelection))]
public Contractor Contractor
{
get { return _Contractor; }
set { SetPropertyValue(nameof(Contractor), ref _Contractor, value); }
}
[Browsable(false)]
public IList<Contractor> ContractorSelection
{
get
{
return Category?.AssignedContractorCategory.Select(i => i.Contractor).Distinct().ToList();
}
}
我测试了这个,它在XAF Blazor中运行良好
替代方法: 如果您希望对象由DB过滤(如果您有大量Contractor集合,则这是理想的选择),则可以改用
datasourceceriteria
-属性,然后从初始解决方案中删除ContractorSelection
-属性。所有其他代码保持不变:
private Contractor _Contractor;
[DataSourceCriteria("AssignedContractorCategory[Category = '@This.Category'].Count > 0")]
public Contractor Contractor
{
get { return _Contractor; }
set { SetPropertyValue(nameof(Contractor), ref _Contractor, value); }
}
其他信息:
- 我们尚未定义在未选择任何类别时XAF应显示的内容。查看
-属性的XAF文档,了解如何在数据源为空时指定适当的行为DataSourceProperty
- 您可能还希望使用
类别设置器来强制执行其他约束,例如,如果当前选择的
不是所选类别的一部分,则将承包商
设置为null。你拥有的相互依赖的属性越多,它就越复杂承包商
- 如果您的代码> AsgigeDebug类别类仅用作<代码>承包者< /代码>和<代码>类别< /代码>(没有附加属性)之间的纯链接,那么您可能需要考虑使用XPO的集成 。
private Contractor _Contractor;
[DataSourceCriteria("AssignedContractorCategory[Category = '@This.Category'].Count > 0")]
public Contractor Contractor
{
get { return _Contractor; }
set { SetPropertyValue(nameof(Contractor), ref _Contractor, value); }
}