首页 > 代码库 > 使用列号访问DataGrid中的列引起的问题

使用列号访问DataGrid中的列引起的问题

问题描述

WPF应用程序中,使用DataGrid来显示员工信息,包含公司名称,姓名,年龄,电话四列。而在某些情况下,电话列需要被隐藏,所以在画面的后端代码中使用下面的代码来控制电话列的显示情况。

if (isShowTelephone)
{
    this.DataGrid_People.Columns[3].Visibility = Visibility.Visible;
}
else
{
    this.DataGrid_People.Columns[3].Visibility = Visibility.Collapsed;
}
当然,使用这些代码可以达到想要的效果。只是,这里存在一个隐患:倘若后面的开发人员在电话列的前面增加或者删除了若干列的话,再去执行我们的代码就会出问题,因为此时的this.DataGrid_People.Columns[3]指的就不再是电话列,那么控制电话列显示的代码就变成了控制其他列显示的代码,该隐藏的可能没有被隐藏,而该显示的可能没有被正常显示。

 

解决方法

为电话列指定Name,使用Name来访问电话列,假设将电话列命名为Columns_Telephone,那么控制电话列显示的代码可以修改为:

if (isShowTelephone)
{
    this.Columns_Telephone.Visibility = Visibility.Visible;
}
else
{
    this.Columns_Telephone.Visibility = Visibility.Collapsed;
}
这样一来,再在电话列前面增加或者删除列时,就不会影响到这部分代码的正确执行了。

使用列号访问DataGrid中的列引起的问题