DataGridView打开一些文件,但有些会有几列,但我只需要显示其中4列(譬如第一列名:编号),我怎么隐藏其他列呢?我一开始是这样去隐藏
dataGridView1.Columns[0].Visible = false;
,但考虑到每个文件都不同,这样不太灵活,动态隐藏列要怎么实现呢?

解决方案 »

  1.   

    如果你所有的数据源中都有相同的需要显示的列,那么你就循环一下,把你需要的列设为trueelse 全为false即可。
      

  2.   

    dataGridView1.Columns[] 没有 string 的索引器吗 。如果你要隐藏列 还有一个方法就是吧它的 宽度给 设置成 0 
      

  3.   


            protected void InitDgvGoodsInfor(DataGridView dgv)
            {
                for (int count = 0; count < dgv.Columns.Count; count++)
                {
                    if (dgv.Columns[count].HeaderText.Trim().ToLower() == "goodsname")
                    {
                        dgv.Columns[count].HeaderText = "名称";
                        dgv.Columns[count].DisplayIndex = 0;
                        continue;
                    }
                    else if (dgv.Columns[count].HeaderText.Trim().ToLower() == "goodscode")
                    {
                        dgv.Columns[count].HeaderText = "商品码";
                        dgv.Columns[count].DisplayIndex = 1;
                        continue;
                    }
                    else if (dgv.Columns[count].HeaderText.Trim().ToLower() == "goodsnorm")
                    {
                        dgv.Columns[count].HeaderText = "规格型号";
                        dgv.Columns[count].DisplayIndex = 2;
                        continue;
                    }
                    else if (dgv.Columns[count].HeaderText.Trim().ToLower() == "goodsunit")
                    {
                        dgv.Columns[count].HeaderText = "计量单位";
                        dgv.Columns[count].DisplayIndex = 3;
                        continue;
                    }
                    else
                    {
                        dgv.Columns[count].Visible = false;
                        continue;
                    }
                }
            }
      

  4.   

    我特意看了下 有 参数为 string ColumnName 的索引器啊 
      

  5.   

    不能用 Visible  的 ,这样你这 列的数据 你就读不到了, 最好的方法是要数据还不被看见就是宽度强制成 0
      

  6.   

         for (int count = 0; count < dataGridView1.Columns.Count; count++)
                        {
                            if (dataGridView1.Columns[count].HeaderText.Trim().ToLower() == "Date")
                            {
                           
                                MessageBox.Show("111111111111111111");
                            }
                        }为什么我设断点了,值为date了怎么不执行这个MessageBox.Show("111111111111111111");
      

  7.   

    去掉 ToLower() 就OK了 谢谢你们
      

  8.   

    可以动态隐藏,但是首先需要你确定在什么情况下,哪个列需要隐藏,可以检查列名称,然后再visual=false;
      

  9.   

    不执行,还有问啊, 因为 IF 不满足被。我就不明白了,你为什么非的用 int 索引, 如果列变掉了你不是悲剧吗, 你为什么不用 string 索引foreach(var column in this.dateGridView.Columns)
    {
        if(column.Caption 或 column.HeaderText == "Data")
        {
                 ......
        }
    }