我需要遍历我从数据库返回的自定义对象类型的属性,并仅显示包含数据的列。 这意味着我不能简单地将对象列表绑定到datagrid。 我不想遍历每个对象并查看列是否为空/ null并在UI中确定以显示它。 在我发送对象之前,我正在考虑的是在我的业务层中,我将发送一个IEnumerable,只返回那些应该可见的列。因此我考虑使用Linq to Object来做这件事,但我不确定那会非常漂亮。
有没有人知道我可以使用的解决方案,如果没有大量的IF语句,我可以通过大型对象(30个左右的列)检查以确定应该显示的内容。
Foreach (CustomerData customerdata in Customers)
{
if (!customerdata.address.Equals(""))
{
dgvCustomerData.Column["Address"].visible = false;
}
//Continue checking other data columns...
}
我希望在UI和所有IF中避免所有这些... 我有一个大脑放屁这个人可以帮助我吗?
由于
答案 0 :(得分:4)
您可以执行以下操作来简化它
Action<T,string> del = (value,name) => {
if ( value.Equals("") ) {
dgvCustomerData.Column[name].Visible = false;
}
};
foreach ( var data in Customers ) {
del(data.address,"Address");
del(data.name, "Name");
...
}
答案 1 :(得分:2)
看看the .NET Reflection Libraries。您可以使用反射来获取所有对象的属性,并循环遍历它们以查明它们是否为空。然后,您可以返回KeyValuePair对象的集合,其中Key =属性名称,Value = true / false。然后,您可以使用keyvaluepairs设置列可见性...