当前位置: 首页 > 编程语言 > C#

使用自定义DataSource时如何隐藏DataGridView的列?分享

时间:2023-04-11 01:15:39 C#

使用自定义DataSource时如何隐藏DataGridView的列?我在c#中有一个小应用程序,其中填充了一个DataGridView:grid.DataSource=MyDatasourcearray;MyClass保存列的结构,如下所示:classMyDatasource{privatestringcolumn1;私有字符串column2;publicMyDatasource(stringarg1,stringarg2){this.column1=arg1;this.column2=arg2;}publicstringcolumn1{get{returnthis.column1;}设置{this.column1=value;}}publicstringcolumn2{get{returnthis.column2;}设置{this.column1=value;}}}一切正常,DataGridView填充了正确的数据,但现在我想隐藏column2。我尝试在列声明上方添加[Browsable(false)],这将隐藏它,但我还需要从代码访问列值,当我使用[Browsable(false)]并尝试读取内容时,它将是就像列不存在一样。如果我不使用它,我可以毫无问题地阅读该列,但它在DataGridView中可见。如何隐藏列但仍然能够从代码中读取其内容?在某些情况下,首先向DataGridView添加一列然后隐藏它可能不是一个好主意。例如,我有一个类,该类具有公司徽标的Image属性的NHibernate代理。如果我访问该属性(例如,通过调用其ToString方法在DataGridView中显示它),它会从SQL服务器下载图像。如果我有一个Company对象列表并将其用作DataGridView的数据源,那么(我怀疑)它会在我隐藏该列之前下载所有徽标。为防止这种情况,我在图像属性上使用了自定义属性[System.ComponentModel.Browsable(false)],以便DataGridView忽略该属性(未创建列且未调用ToString方法)。publicclassCompany{...[System.ComponentModel.Browsable(false)]virtualpublicMyImageClassLogo{get;set;}您必须隐藏网格视图控件中的列,而不是数据源。将它隐藏在数据源中它根本不会被渲染到网格视图中,所以你将无法访问网格视图中的值。按照你的建议去做,你必须通过数据源访问列值,而不是网格视图。要隐藏网格视图控件上的列,可以使用如下代码:dataGridView1.Columns[0].Visible=false;要从数据源访问列,您可以试试这个:objectcolValue=((DataTable)dataGridView.DataSource).Rows[dataSetIndex]["ColumnName"];我不确定是否为时已晚,但问题是如果在运行时绑定,则无法在设计模式下设置列。因此,如果您在运行时进行绑定,请继续并从设计模式中删除列,务实..if(dt.Rows.Count>0){dataGridViewProjects.DataSource=dt;dataGridViewProjects.Columns["标题"].Width=300;dataGridViewProjects.Columns["ID"].Visible=false;我注意到如果在panel1.Controls.Add(dataGridView);之前使用如果以编程方式使用,它会呈现不完整(整个表单根本不“绘制”任何内容panel1.Controls.Add(dataGridView);然后dataGridView.Columns["ID"].Visible=false;将破坏整个表单并使它是空白的,所以绕过设置这个AFTEREG:panel1.Controls.Add(dataGridView);dataGridView.Columns["ID"].Visible=false;//worksdataGridView.Columns["ID"].Visible=false;panel1.Controls.Add(dataGridView);//为该特定列dataGridView[ColumnNameorIndex].Visible=false设置Visibleproperty=false惨遭失败;编辑抱歉缺少Columns属性dataGridView.Columns[ColumnNameorIndex].Visible=false;我遇到了同样的问题这是一个可能适合您计划的解决方案。对我有用以上是C#学习教程:HowtohidecolumnsofDataGridViewwhenusingcustomDataSource?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——GridView1.DataBind();如果(GridView1.Columns.Count>0)GridView1.Columns[0].Visible=false;else{GridView1.HeaderRow.Cells[0].Visible=false;foreach(GridView1.Rows中的GridViewRowgvr){gvr.Cells[0].Visible=false;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: