【问题标题】:C# How to Access Hidden DataTable Columns That is DataSource Binded in DataGridViewC#如何访问DataGridView中绑定的DataSource隐藏的DataTable列
【发布时间】:2016-02-07 03:58:00
【问题描述】:

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

详细说明:dtResult 是一个 DataTable 示例尝试:

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

dtResult.Columns.RemoveAt(i);

然后存储到DataGridView的DataSource中:

dataGridView.DataSource = dtResult;

访问隐藏列发生错误:“无法找到‘活动’列”:

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

那么 DataGridView 有没有办法在将其绑定到 DataGridView 之前获取 隐藏DataTable 中的隐藏列强>?

请帮帮我~ .谢谢

仅供参考:

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 中

【问题讨论】:

    标签: c# winforms datagridview datatable hidden-field


    【解决方案1】:

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

    【讨论】:

    • 我完全同意这一点。除了您所说的之外,一旦将列隐藏在 datagridview 中,它仍然可以通过代码完全访问并且易于操作/使用。它只是对用户不可见。 dataGridView.SelectedRows[0].Cells["active"].Value.ToString() ... 应该可以正常工作。
    • 是的,我完全同意你刚才所说的。只是该项目是在所有DataGridView中设计的,都是全局使用的,并且有DataTable作为数据源。一直在伸展我的大脑来解决这个难题。但无论如何,谢谢你的回答。谢谢 XD 我尝试使用其他方法
    【解决方案2】:

    我知道这很旧,但我今天遇到了同样的问题,所以我发布了我的解决方案。我正在使用 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 上进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2017-05-02
      • 1970-01-01
      • 2012-12-06
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多