最近在研究wpf的DataGrid绑定DataTabel,绑定之后没有问题,但是我想隐藏某一列,在绑定之后设置这一列的Visibility属性为Collapsed或者为Hidden,都不能马上将这个列隐藏。
具体代码为:
dataGrid1.ItemsSource = dt.DefaultView;
dataGrid1.Colums[1].Visibility = Visibility.Collapsed;
这个方式,需要将页面切换一下才显示效果,否则我想隐藏的那个列一直显示。这个很奇怪。我找了很多方式都无法很好的将列隐藏。请问这个wpf的DataGrid是不是有其他设置才能很好的显示啊?我该如何解决这个问题?
这个DataGrid的显示模板,我只显示了一个列,其他的由DataTable自动生成,我要隐藏的就是DataTable里面的一列。
在绑定的时候,出现一个很奇怪的问题,直接不判断DataGrid的列数,直接使用dataGrid1.Colums[1].Visibility = Visibility.Collapsed;设置隐藏列,会报错:索引超出范围。必须为非负值并小于集合大小。参数:index
附加:
我发现实际上已经隐藏了列,但是就是在第一次显示的时候没有隐藏,如果进行翻页,或者全选等操作的时候,那个隐藏的列就没有了
我也遇到这个问题了,我没有把DataGrid嵌套那么多层,页面直接就是DataGrid,绑定的DataTable,但还是会报索引超出范围的错误,所以应该是DataGrid本身的问题
绑定后,不能马上设置那个列不显示,否则会报错。我很奇怪这个问题。不知道你是怎么解决的。
@王继: 在DataGrid的Loaded事件里写dataGrid1.Colums[1].Visibility = Visibility.Collapsed;
@甜甜蛋酥卷: 成功解决。谢谢!
你试一下修改完Visibility后调用一下这个方法。
this.dataGrid1.InvalidateVisual();
这个方法不行。跟没有使用一样。
我在群里问,有人说,我这个代码就可以实现隐藏,但是主要是第一次不能出现想要的效果,我是在TableControl里面放DataGrid的,并且动态生成TableControl的Item,在每个TableControl下面生成一个DataGrid,然后在DataGrid上绑定DataTable,绑定好之后,设置列的可见性。
@王继: 这跟DataGrid放在TableControl里面有关系?没看出来。
@LCM: 问题是,我怎么解决这个问题啊。。
@LCM: 我已经用InvalidateVisual();方法在可能出问题的地方都处理了。还是不行。
@王继: 把你DataGrid相关的代码贴出来看看。
@LCM: 这个太复杂了。。我是一个工程。。。分开写的。。
@王继: 我可以将几个部分的伪代码写出来。主要是公司的工作环境是封闭的,代码不容易考出来。
而且这个代码也有点复杂。
@王继: 你检查一下顺序,绑定DataTable肯定会在你设置列的可见性前面执行吗?
@LCM:
我是在a窗体里面加载的uc控件b,然后在uc控件b里面再 加载uc控件c,uc控件c里面加载DateGrid。
然后再在DataGrid上绑定DataTable,
而且在uc控件b里面可以动态添加uc控件c。
uc控件c上面,实现动态分页。
将DataTable分页显示在uc控件c上
以上说的都是错误的
正确的应该是LayoutUpdated 事件,而不是Loaded事件。下面是我的例子
this.dataGrid1.LayoutUpdated += new EventHandler(dataGrid1_LayoutUpdated);
void dataGrid1_LayoutUpdated(object sender, EventArgs e)
{
if(dataGrid1.Columns.Count>=4)
{
this.dataGrid1.Columns[4].Visibility = System.Windows.Visibility.Hidden;
}
}
我测试过 可以用
haha,这个栗子好,就是这样子,成功了。