You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态创建DataGridView遇类型转换及Visible属性错误求助

问题分析与解决方案

看起来你把WinForms里两个不同控件体系的列类型搞混啦!DataGridTextBoxColumn是给旧版的DataGrid控件用的,而你现在创建的是DataGridView控件,这俩的列类型完全不兼容,这就是报错的根源。

具体错误原因:

  • 类型转换错误:DataGridTextBoxColumn并不是DataGridViewColumn的子类,所以你没法把它加到DataGridView的Columns集合里,这就是AddRange时报错的核心原因。
  • Visible属性不存在:DataGridTextBoxColumn确实没有Visible属性——因为旧版DataGrid的列显示逻辑和DataGridView完全不同,但你本来就不该用这个列类型在DataGridView上。

修复后的完整代码:

只需要把列类型换成DataGridViewTextBoxColumn(注意是DataGridView开头的),其他逻辑调整一下就可以正常运行了:

private DataGridView dgview;
// 把DataGridTextBoxColumn替换为DataGridView对应的文本列类型
private DataGridViewTextBoxColumn dgviewcol1;
private DataGridViewTextBoxColumn dgviewcol2;

void Search() {
 dgview = new DataGridView();
 dgviewcol1 = new DataGridViewTextBoxColumn();
 dgviewcol2 = new DataGridViewTextBoxColumn();

 this.dgview.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
 // 现在可以正常添加列,因为DataGridViewTextBoxColumn是DataGridViewColumn的子类
 this.dgview.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {this.dgviewcol1, this.dgviewcol2});
 
 dataGridView2.Visible = false;
 // DataGridViewTextBoxColumn自带Visible属性,现在可以正常设置
 this.dgviewcol1.Visible = false;
 this.dgviewcol2.Visible = false;

 this.Controls.Add(dgview);
 this.dgview.ReadOnly = true;
 dgview.BringToFront();
}

额外小提示:

如果需要给列设置标题、绑定数据源字段,还可以在实例化列的时候补充这些属性:

dgviewcol1.HeaderText = "第一列标题";
dgviewcol1.DataPropertyName = "数据源对应字段名"; // 绑定数据源时使用

内容的提问来源于stack exchange,提问作者Hichem Fellah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:52:26