动态创建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
相关产品推荐
相关产品推荐

