【发布时间】:2012-11-07 09:30:39
【问题描述】:
我在SO 上看到了很多关于列的奇怪行为及其可见性的帖子,尤其是在刷新网格和动态构建列表中的列时,但还没有找到令人满意的解决方案。
经过一番挖掘,我几乎可以肯定这个问题是由于使用了DataGridView.Columns.Clear() 方法造成的。
到目前为止,我还没有弄清楚为什么,但是当我动态构建我的 DataGridView 列时删除 Clear() 方法会阻止隐藏列的出现,但我不明白为什么这会产生任何影响?当然,如果您清除 Columns 集合并使用 DataGridView.Columns.Add() 开始添加新集合,代码如下;
dataGridView1.Columns.Clear(); // This is the offending method!!
dataGridView1.AutoGenerateColumns = false;
dataGridView1.ShowEditingIcon = false;
dataGridView1.RowHeadersVisible = false;
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "ID";
col.HeaderText = "ID";
col.Visible = false; // Notice the visibility of this column...
dataGridView1.Columns.Add(col);
... // Code is repeated for other columns in the collection
我看不出有什么问题,但如果dataGridView1.Columns.Clear(); 包含在开头,我的隐藏列就会变得可见,这肯定是一个错误吗?
【问题讨论】:
-
添加列后是否尝试过dataGridView1.Invalidate()?
-
我确实用
Refresh()尝试了很长一段时间,这或多或少是一回事。行为方式相同... -
我设法绕过它的唯一方法是停止动态重建我的列列表,这并不理想(只需在表单加载时加载我的列创建方法),因为我想显示不同的结果有不同的标准。
-
你有没有尝试过一些类似空数据表到你的datagridview的东西,比如
DataTable dtEmpty=new DataTable(); dataGridView1.DataSource = dtEmpty;或简单的dataGridView1.DataSource = null; -
我喜欢这个被否决的方式,我提供了我能提供的所有信息,并试图让问题尽可能清晰。关于我可以做得更好的一点反馈会很好。
标签: c# .net datagridview visibility datagridviewcolumn