this.entityModel.Entities
是datagrid(agdatagrid)
的来源。
我保留了AutoGenerateColumns="False"
。
我的agdatgrid
我希望第6列可见,具体取决于该列的数据..如果该列的任何行包含数据,那么它应该是可见的,如果该行中没有任何行包含该列的数据,它应该是是看不见的。
所以我编写了一个foreach循环,但如果数据很大,则需要更多时间来加载ui。还有其他方法吗?
foreach (BrowserEntity _browseEntity in this.entityModel.Entities)
{
if (_browseEntity.State != null && this.entityModel.Entities.Count>0)
{
this.grid.DataSource = this.entityModel.Entities;
this.grid.Columns[6].Visible = true;
break;
}
else
{
this.grid.DataSource = this.entityModel.Entities;
this.grid.Columns[6].Visible = false;
}
}
答案 0 :(得分:2)
首先看一下你所写内容的逻辑。你在迭代它的循环中检查一个集合的计数是否大于零;这将始终返回true,因为如果集合包含任何内容,循环将不会运行。所以你实际写的就是这个,当总是返回true或者不能执行的代码被删除时:
foreach (BrowserEntity _browseEntity in this.entityModel.Entities)
{
if (_browseEntity.State != null)
{
this.grid.DataSource = this.entityModel.Entities;
this.grid.Columns[6].Visible = true;
break;
}
}
所以你要多次分配数据源,并且从不将Visible
设置为false,而我认为你实际上要编写的是这样的:
// bind the grid but hide column 6
this.grid.DataSource = this.entityModel.Entities;
this.grid.Columns[6].Visible = false;
// if there is any state then show column 6
foreach (BrowserEntity _browseEntity in this.entityModel.Entities)
{
if (_browseEntity.State != null)
{
this.grid.Columns[6].Visible = true;
break;
}
}
或者,使用Linq,这可以写成如下,实现相同的目的,但更清晰:
this.grid.DataSource = this.entityModel.Entities;
this.grid.Columns[6].Visible = this.entityModel.Entities.Any(e => e.State != null);
答案 1 :(得分:1)
我不是这方面的专家......但为什么每次都要重置DataSource?
bool isColumnVisible = false;
this.grid.DataSource = this.entityModel.Entities;
foreach (BrowserEntity _browseEntity in this.entityModel.Entities)
{
if (_browseEntity.State != null && this.entityModel.Entities.Count>0)
{
isColumnVisible = true;
break;
}
}
this.grid.Columns[6].Visible = isColumnVisible;
我认为这应该更快......至少我希望如此。
答案 2 :(得分:0)
我不是一个Silverlight开发人员,但为什么要在foreach循环中检查“this.entityModel.Entities.Count> 0”?我假设当你进入循环时,计数总是> 0;不是吗?