2015-11-06 86 views
0

我有一个困难时期试图访问一个被隐藏在数据表,后来结合并在DataGridView中C#如何访问隐藏数据表列即数据源绑定在DataGridView中

在详细访问隐藏的列:dtResult是一个DataTable 例如尝试:

dtResult.Columns[i].ColumnMapping = MappingType.Hidden; 

OR

dtResult.Columns.RemoveAt(i); 

然后存储到DataGridView的数据源的:

dataGridView.DataSource = dtResult; 

访问隐藏的列会出现错误:“列‘活动’无法找到”:

dataGridView.SelectedRows[0].Cells["active"].Value.ToString() 

等是有办法的的DataGridView获得隐藏列是被隐藏在将数据表绑定到DataGridView之前在

请帮我〜。谢谢

FYI:

I just realized 
That DataSource Binding doesn't include Hidden Columns of DataTable. 
Means That If DataTable.Column.Count = 10. (2 Hidden) 
DataGridView.DataSource = DataTable. 
DataGridView.Column.Count == 8. 

所以导致我问。 如何将这些隐藏的列绑定到DataTable的DataGridView中

回答

1

为什么需要隐藏数据表中的列? UI中的可见性是一个UI关注的问题,我会将数据表绑定到datagridview,并在datagridview中隐藏所需的列。

+0

我完全同意这一点。基于你所说的,一旦列被隐藏在datagridview中,它仍然可以被代码完全访问,并且易于操作/使用。这对用户来说是不可见的。 dataGridView.SelectedRows [0] .Cells [“active”]。Value.ToString()...应该没有问题。 – Timmy

+0

是的确实,我完全同意你刚才所说的话。只是该项目是在所有DataGridView中设计的都是全局用途,并且具有DataTable作为数据源。 一直在伸展我的大脑来解决这个难题。 但无论如何,谢谢你的回答。谢谢XD我尝试使用其他方法 – Jacksern

0

我知道这是旧的,但我今天有同样的问题,所以我张贴我的解决方案。我正在使用DataSet.ReadXml(Stream)将xml文件转储到DataSet中,并且为关系生成的列在DataGridView中未显示。以下代码循环遍历DataSet中每个DataTable中的所有列,并将ColumnMapping属性更改为MappingType.Element。我选择了MappingType.Element,因为可见列被设置为该描述,描述适合我的情况:“列被映射到XML元素。”

简短回答:将ColumnMapping从MappingType.Hidden更改为在绑定到DataGridView之前未隐藏的内容。

... 
    DataSet ds; 
    ... 
    foreach(DataTable dtbl in ds.Tables) 
    { 
     foreach(DataColumn dcol in dtbl.Columns) 
     { 
      if (dcol.ColumnMapping == MappingType.Hidden) 
      { 
       dcol.ColumnMapping = MappingType.Element; 
      } 
     } 
    } 

    DataGridView.DataSource = ds; 

然后,如果你需要将它们隐藏在UI中,你可以在DataGridView上做到这一点。