C#如何访问DataGridView中绑定的DataSource的隐藏DataTable列

时间:2015-11-06 04:19:50

标签: c# winforms datagridview datatable hidden-field

我很难尝试访问隐藏在DataTable中的隐藏列,后来在DataGridView中绑定和访问

详细信息:dtResult是一个DataTable 试过的例子:

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

OR

dtResult.Columns.RemoveAt(i);

然后存储到DataGridView的DataSource:

dataGridView.DataSource = dtResult;

访问隐藏列时出现错误:"列'活动'无法找到" :

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

DataGridView 是否有办法隐藏列 隐藏 DataTable,然后再将其绑定到DataGridView

请帮帮我〜。谢谢

仅供参考:

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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上执行此操作。